time常用函数
最近参与python的一个项目,发现经常遇到一些常用的模块,而每次使用时,我都要查一遍。终于,我决定要各个击破,对常用的python小知识进行总结。下面总结了python中对时间处理的常见函数。
在开始之前,首先要说明这几点:
- 在Python中,通常有这几种方式来表示时间:1)、时间戳 2)、格式化的时间字符串 3)、元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
- UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
- 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日08:00:00开始按秒计算的偏移量。运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
- 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。
time的函数较多,但常用的也就那几个。使用time函数前,照例先导入time模块。介绍常用函数前要先了解最基础的函数:
(1)、time函数——返回当前时间的时间戳,浮点数格式
>>> from time import * #导入python模块的所有函数 >>> time() 1370485361.442
(2)、localtime函数——localtime([secs]),将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
#默认以当前时间为准 >>> localtime() time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=39, tm_sec=49, tm_wday=3, tm_yday=157, tm_isdst=0) #等同于localtime() >>> localtime(time()) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=40, tm_sec=37, tm_wday=3, tm_yday=157, tm_isdst=0) #指定一个时间戳参数 >>> localtime(1370485361.442) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=10, tm_min=22, tm_sec=41, tm_wday=3, tm_yday=157, tm_isdst=0) #默认从1970年1月1日开始 >>> localtime(345) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=5, tm_sec=45, tm_wday=3, tm_yday=1, tm_isdst=0) >>> localtime(1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=1, tm_wday=3, tm_yday=1, tm_isdst=0)
localtime()输出参数说明:
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2013 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 61 |
6 | tm_wday(weekday) | 0 - 6(0表示周日) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为-1 |
(3)、gmtime()函数——和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
>>> gmtime() time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=47, tm_wday=3, tm_yday=157, tm_isdst=0) >>> gmtime(time()) time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=4, tm_min=2, tm_sec=53, tm_wday=3, tm_yday=157, tm_isdst=0)
(4)、asctime()函数——asctime([tuple]), 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。
>>> asctime()#默认是当前时间的struct time 'Thu Jun 06 10:55:40 2013' >>> asctime(localtime()) 'Thu Jun 06 10:56:02 2013'
(5)、ctime函数——ctime([secs]),把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
>>> ctime() #等同于ctime(time()) 'Thu Jun 06 11:05:34 2013' >>> ctime(time()) 'Thu Jun 06 11:05:44 2013' #默认从1970年1月1日08:00:00开始 >>> ctime(238) 'Thu Jan 01 08:03:58 1970' >>> ctime(1) 'Thu Jan 01 08:00:01 1970'
以上是基础的时间函数,下面是常用的时间处理函数。
实际存储中,更多的是存储时间戳(这样易于时间的计算,有更好的存储性能)而不是更易于我们阅读的时间格式,所以,我们有将时间戳转换为普通时间格式的冲动——strftime函数。
(6)、strftime函数——strftime(format[, tuple]): 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。 如果tuple未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
>>> strftime('%Y-%m-%d %H:%M:%S', localtime(time())) '2013-06-06 11:10:57' #这是我们比较喜爱的时间格式 >>> strftime('%Y-%m-%d', localtime()) '2013-06-06' >>> strftime('%Y-%m-%d %X', localtime()) ==> %X给出默认本地相应时间 '2013-06-06 11:12:39'
Format参数说明:
格式 | 含义 |
---|---|
%a | 本地(locale)简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%B | 本地完整月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 第几个小时(12小时制,01 - 12) |
%j | 一年中的第几天(001 - 366) |
%m | 月份(01 - 12) |
%M | 分钟数(00 - 59) |
%p | 本地am或者pm的相应符 |
%S | 秒(01 - 61) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉世纪的年份(00 - 99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
(7)、mktime()函数——mktime(tuple),将一个struct_time或者9个参数的时间元组转化为时间戳。
>>> mktime(localtime()) 1370490962.0 >>> mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0) #这样写是错的 Traceback (most recent call last): File "<pyshell#28>", line 1, in <module> mktime(2013, 6, 6, 13, 3, 38, 1, 48, 0) TypeError: mktime() takes exactly one argument (9 given) >>> mktime((2013, 6, 6, 13, 3, 38, 1, 48, 0))#注意这里9个参数的元组作为一个参数 1370495018.0 >>>
(8)、strptime()函数——strptime(string[, format]):把一个格式化时间字符串转化为struct_time。它是strftime()的逆操作。
>>> strptime('2013-06-06 11:12:39','%Y-%m-%d %X') time.struct_time(tm_year=2013, tm_mon=6, tm_mday=6, tm_hour=11, tm_min=12, tm_sec=39, tm_wday=3, tm_yday=157, tm_isdst=-1)
其他常用的时间函数:
(9)、sleep()函数——sllep(secs),可以通过调用time.sleep来挂起当前的进程。time.sleep接收一个浮点型参数,表示进程挂起的时间。
(10)、clock()函数——这个函数在不同的系统上含义不同。 在Linux系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。在windows操作系统上,time.clock() 返回第一次调用该方法到现在的秒数,其精确度高于1微秒。可以使用该函数来记录程序执行的时间。
总结一下该函数有两个功能:
在第一次调用的时候,返回的是程序运行的实际时间;
以第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔
>>> clock() 1.655286571487689e-06 #第一次调用是程序运行时间 >>> clock() 8.366160976619078 #第二次调用是与第一次的时间间隔 >>> clock() #第三次调用是与第一次的时间间隔 12.056175791433892 >>> sleep(1)
总结一下:
(1)、常见应用
1)、获取当前时间:
time.time() 获取当前时间戳
time.localtime() 当前时间的struct_time形式
time.ctime() 当前时间的字符串形式
2)、将时间戳转换为字符串:
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
3)、将字符串转换为时间戳:
time.mktime(time.strptime('2013-06-06 09:00','%Y-%m-%d %H:%M'))
(2)、在Python*有三种表达方式以及这三种方式之间的转换:
1)、timestamp
2)、tuple或者struct_time
3)、格式化字符串。
当然time模块还有其它函数,目前还没用到,用到再进行补充。