Python的time和datetime模块
Python的time和datetime模块
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 |
by @ sunhaiyu
2017.7.6
Python的time和datetime模块的更多相关文章
- python中time、datetime模块的使用
目录 python中time.datetime模块的使用 1.前言 2.time模块 1.时间格式转换图 2.常用方法 3.datetime模块 python中time.datetime模块的使用 1 ...
- Python 入门之 内置模块 -- datetime模块
Python 入门之 内置模块 -- datetime模块 1.datetime模块 from datetime import datetime (1)datetime.now() 获取当前时间和日期 ...
- Python中time和datetime模块的简单用法
python中与时间相关的一个模块是time模块,datetime模块可以看为是time模块的高级封装. time模块中经常用到的有一下几个方法: time()用来获取时间戳,表示的结果为从1970年 ...
- python基础--time和datetime模块
一:说明在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能 ...
- [ Python入门教程 ] Python中日期时间datetime模块使用实例
Python中datetime模块提供强大易用的日期处理功能,用于记录程序操作或修改时间.时间计算.日志时间显示等功能.datatime模块重新封装了time模块,提供的类包括date.time.da ...
- python标准库:datetime模块
原文地址:http://www.bugingcode.com/blog/python_datetime.html datatime 模块题共用一些处理日期,时间和时间间隔的函数.这个模块使用面向对象的 ...
- Python之 time 与 datetime模块
time与datetime模块 一.time 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏 ...
- 【Python】Python的time和datetime模块
time 常用的有time.time()和time.sleep()函数. import time print(time.time()) 1499305554.3239055 上面的浮点数称为UNIX纪 ...
- python 的time、datetime模块
python 时间模块 import datetime res = datetime.datetime.now() print(res) # 2022-08-07 16:47:07.120459 ...
随机推荐
- python web -- flask
Flask是一个简洁的 Python_web 框架. 零. virtualenv 虚拟环境配置. $ easy_install pip $ pip install virtualenv $ virtu ...
- 使用jQuery筛选排除元素以修改指定标签的属性
简单案例: $(function(){ $("td[id][id!='']").click(function(){ //你的逻辑 }); }); 上述代码,有id且id不为空的td ...
- 使用zabbix_agent监控第一台windows服务器
解压windows客户端压缩包 bin目录下会有win32和win64俩个文件夹,根据windows系统的版本自行进行选择,将客户端程序文件拷贝至C:\zabbix 将conf文件中的zabbix_a ...
- 基于spring多数据源动态调用及其事务处理
需求: 有些时候,我们需要连接多个数据库,但是,在方法调用前并不知道到底是调用哪个.即同时保持多个数据库的连接,在方法中根据传入的参数来确定. 下图的单数据源的调用和多数据源动态调用的流程,可以看出在 ...
- 【Android Developers Training】 11. 支持不同语言
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 信息安全的核心:CIA三元组 | 安全千字文系列1
我们总是在说信息安全管理,那么信息安全管理到底是在管什么?我们要如何定义信息安全? 这里就要引出信息安全最基本的概念:CIA三元组. 这里的 C,指的是Confidentiality机密性 这里的 I ...
- JVM总结之内存区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,有的区域是线程共享的,有的区域是线程隔离的.如下图: 程序计数器 程序计数器(Progra ...
- maven配置本地仓库(从本地仓库下载jar包到.m2仓库)
Windows-->preference 把你的settings.xml存到一个地方maven指向你的settings.xmlsettings.xml里的地址是你们 ...
- js模块化/js模块加载器/js模块打包器
之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...
- 自定义事件解决重复请求BUG
现在,组件化开发还是比较流行的,毕竟其优点相当突出.最近在开发一个组件的时候,遇到了一个很有意思的BUG... BUG的背景 最近在开发一个组件,好不容易开发好了转测试.然后,测试给我提了一个这样的b ...