time

常用的有time.time()time.sleep()函数。

import time

print(time.time())
1499305554.3239055

上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round函数,可以实现浮点数的四舍五入。如下

# 默认四舍五入到整数位,即不保留小数
print(round(time.time()))
# 可指定参数保留的小数位数
print(round(time.time(), 2))
1499305554
1499305554.49

time.sleep(sec)可以让当前休眠,参数填入秒(s)。

print('good')
time.sleep(5.5)
# 5.5秒后才打印这句
print('yes')
good
yes

其他一些函数的使用

# 返回UTC时间
print(time.gmtime())
# 返回本地时间,在中国就是UTC+8
print(time.localtime())
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)

可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour不一样(它们相差了刚好+8),其余都一样。

下面的函数可以返回一个格式化的日期时间,看起来更加直观。

print(time.ctime())
print(time.asctime())
# 由于使用默认参数和上面的结果一样
print(time.ctime(time.time()))
print(time.asctime(time.localtime()))
Thu Jul  6 09:46:15 2017
Thu Jul 6 09:46:15 2017
Thu Jul 6 09:46:15 2017
Thu Jul 6 09:46:15 2017
  • ctime()可以传入一个时间戳,没有指定参数时,默认使用当前时间戳作为参数。即time.time()
  • gtime()可以传入一个struct_time,没有指定参数时,默认使用当前时间。即time.localtime()

struct_time转化为字符串及字符串转为struct_time

  • strptime的第一个参数是字符串形式的日期,第二个参数是自定义的日期转换格式。这两个参数的格式一定要对应。比如time.strptime('2017/7/6', '%Y-%m-%d')一个用了斜杠,一个用了短横线,就会报错。此函数返回一个struct_time
  • strftime的第一个参数是想要转化成的日期格式,第二个参数是一个struct_time,此函数将元组形式的struct_time转化成第一个参数指定的格式样子,返回的是转化后的日期字符串形式。

%Y-%m-%d表示年月日,在datetime模块会详细介绍。

a = time.strptime('2017/7/6', '%Y/%m/%d')
b = time.strftime('%Y-%m-%d', time.localtime())
print(a)
print(b)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)
2017-07-06

测量程序的运行时间

使用时间戳可以方便地计时一段程序地运行时间

start_time = time.time()
sum = 0
for i in range(10000000):
sum += 1 end_time = time.time()
print(end_time - start_time)
2.185124397277832

可以看到执行循环计算加法一千万次,那段程序花了2秒多。

也可以使用time.clock()函数

start = time.clock()
print(start) # 2.6773594453225194e-06
time.sleep(2)
end = time.clock()
print(end - start) # 差值代表了睡眠2秒的时间。2.000246763295544
time.sleep(3)
print(time.clock()) # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
4.4622657422041984e-07
2.0026006084745567
5.013243112269714

可以看到clock第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock的值的差了。即从第一次调用开始算起,到当前调用clock所经历的时间。
像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()还要准确。

datetime

datetime模块用来管理日期和时间,其中有三个子模块。分别是time、date、datetime,所以想要使用datetime可以使用下面的导入方式。

from datetime import datetime
# 返回当前时间
now = datetime.now()
print(now.year, now.month, now.microsecond) # 可以自定义参数,返回格式化后的时间
dt = datetime(2017, 10, 1, 23, 59, 59, 456123)
print(dt)
2017 7 719609
2017-10-01 23:59:59.456123

datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond属性中。

由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()。当然反过来由datetime得到时间戳也是可以的。

# 时间戳转datetime
now = datetime.fromtimestamp(time.time())
print(now)
sometime = datetime(2017, 7, 5, 23, 59, 59)
# datetime转时间戳
print(sometime.timestamp())
2017-07-06 09:46:07.903769
1499270399.0

这些datetime对象可以使用><=符号来比较两个日期的先后。也可进行减运算,表示两个时刻的差值。比如

dt1 = datetime(2017, 5, 31)
dt2 = datetime(2017, 4, 1)
print(dt1 - dt2)
print(dt1 > dt2)
60 days, 0:00:00
True

timedelta表示一段时间

注意它不是表示一个时刻,而是一段时间。

import datetime

delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)
delta1 = datetime.timedelta(days=5, hours=2) print(delta.seconds) # 返回属性hours和seconds的和
print(delta.total_seconds()) # 只是以秒来表示这段时间
print(delta > delta1)
print(delta + delta1)
3659
1818059.234353
True
26 days, 3:00:59.234353

timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds,但是其属性却只有days、seconds、microseconds。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值

将datetime转化为字符串形式及字符串转为datetime对象

time模块也有这两个函数(见上面的例子),使用上比较累类似。

  • strptime按照指定格式将字符串形式的日期转换成datetime对象并返回。
  • strftime将一个datetime对象(比如now)根据指定的格式转换成字符串并返回。
from datetime import datetime

a = datetime.strptime('2017/7/6', '%Y/%m/%d')
b = datetime.now().strftime('%Y-%m-%d')
print(a)
print(b)
2017-07-06 00:00:00
2017-07-06

关于日期时间的格式,看下表。

格式指令 含义
%Y 带世纪的四位年份,如2017
%y 后两位年份,如17表示2017
%m 月份,从01到12
%B 完整的月份,如November
%b 月份的简写,如Nov
%d 一个月中的第几天,如从01到31(如果有的话)
%j 一年中的第几天
%w 一周中的第几天
%A 完整的周几,如Monday
%a 简写的周几,如Mon
%H 24小时制的小时00-23
%h 12小时制的小时01-12
%M 分,00-59
%S 秒,00-59
%p AM或者PM

【Python】Python的time和datetime模块的更多相关文章

  1. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  2. python五十四课——datetime模块

    3.datetime模块:理解:datetime可以认为是time模块的补充/扩展datetime模块中有一些常用类:datetime类:记录了日期和时间数据信息date类:记录了日期数据信息time ...

  3. Python标准库笔记(3) — datetime模块

    datetime模块提供了简单和复杂的方式用于操纵日期和时间的类.虽然支持日期和时间运算,但实现的重点是为了输出格式化和操作高效地提取属性. 1. 模块内容 内容 描述 常量   datetime.M ...

  4. python初步学习-import和datetime模块

    模块 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说,可以把模块理解为一 ...

  5. 二十三、python中的time和datetime模块

    A.time模块   1. sleep():强制等待 import timeimport datetime print("start to sleep.....")time.sle ...

  6. 基于Python的datetime模块和time模块源码阅读分析

    目录 1 前言  2 datetime.pyi源码分步解析 2.1 头部定义源码分析 2.2 tzinfo类源码分析 2.3 date类源码分析 2.4 time类源码分析 2.5 timedelta ...

  7. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

  8. python中datetime模块

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块我在之前的文章已经有所介绍,它提供 的接口与C标准库time.h基本一致.相比于time模块 ...

  9. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  10. python datetime模块参数详解

    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime.time模块,它提供 的接口与C标准库time.h基本一致.相比于time模块,datetime模块的接 ...

随机推荐

  1. Ubuntu genymotion

    官网注册帐号 下载genymotion-[VERSION]_[ARCH].bin 进入android studio In Android Studio, go to File > Setting ...

  2. Linux日志切割logrotate服务配置

    一.logrotate介绍 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.一般centos系统已经自带安装好 ...

  3. SaltStack入门篇(三)之数据系统Grains、Pillar

    1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...

  4. git在windows7下面使用

    1. 首选安装. 2. 打开Git Bash 3. 输入,就是配置一下用户名啥的 $ git config --global user.name "Jack Liao" $ git ...

  5. 洛谷1552 [APIO2012]派遣

    洛谷1552 [APIO2012]派遣 原题链接 题解 luogu上被刷到了省选/NOI- ...不至于吧 这题似乎有很多办法乱搞? 对于一个点,如果他当管理者,那选的肯定是他子树中薪水最少的k个,而 ...

  6. WPF binding Tag

    使用一个控件控制另外一个控件的显示与隐藏.

  7. 借助全新 MATLAB® 适配器代码示例读取英特尔® 实感™ 摄像头数据流

    下载源代码请访问原文地址:借助全新 MATLAB® 适配器代码示例读取英特尔® 实感™ 摄像头数据流 简介 该可下载代码示例简要介绍了如何使用英特尔® 实感™ SDK 和 MATLAB 的图像采集工具 ...

  8. 模拟IDE上的run过程

    看了一下老陈写的模仿JDK动态代理,从中取一部分单独扩展,模拟一下IDE上的run过程(不愧是老陈,去年写的东西我要现在才能理解) 对run过程的猜想 在点击run的过程中应该做了不少事.先编译运行r ...

  9. 福利,一张图看懂IT售前工程师修炼之道

    职场中的新人如何自我定位? 如何深刻理解IT售前这个职位? 如何从IT售前菜鸟成长为IT售前专家? 推荐这本书<IT售前工程师修炼之道> 本书精华内容 售前的重要性 售前要有逻辑能力 售前 ...

  10. 【ML系列】简单的二元分类——Logistic回归

    对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂: http://blog.sciencenet.cn/blog-377709-1121098.html 但王 ...