首页 » Python » 正文

Python中time模块详解

在平常的编码中, 我们常常需要与时间打交道; Python提供了多个内置模块用于操作日期和时间, 如calendar,time,datetime. 转换日期格式是一个常见的功能, 也是容易忘记的, 本文将对 time 模块详解.

time.ctime([secs])
将从纪元开始以秒表示的时间转换为表示本地时间的字符串. 如果未提供secs或None, 则使用由time()返回的当前时间. ctime(secs)等效于asctime(localtime(secs))

>>> time.ctime(0)
'Thu Jan  1 08:00:00 1970'
>>> time.ctime()
'Sat Apr 22 18:11:04 2017'

time.gmtime([secs])
time.localtime([secs])
time.mktime(t)
time.time()

gmtime将从纪元开始以秒表示的时间转换为UTC中的struct_time, 如果未提供secs或None,则使用由time()返回的当前时间.
localtime也类似, 但会转换为本地时间; mgtime是世界协调时间
mktime是localtime的反函数, 返回一个以秒为单位的浮点数; 与time.time()相似

>>> time.gmtime()
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=22, tm_hour=10, tm_min=19, tm_sec=19, tm_wday=5, tm_yday=112, tm_isdst=0)
>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=22, tm_hour=18, tm_min=19, tm_sec=21, tm_wday=5, tm_yday=112, tm_isdst=0)
>>> t = time.localtime()
>>> t.tm_hour
18
>>> time.mktime(time.localtime())
1492959832.0
>>> time.time()
1492959878.739818

time.sleep(secs)
在给定的秒数内暂停调用线程的执行. 参数secs可以是整数或浮点数.

#!/usr/bin/env  python
import time

print("start time: %s" % time.ctime())
time.sleep(3)
print("end time: %s" % time.ctime())

以上实例输出结果为:
start time: Sat Apr 22 19:21:39 2017
end time: Sat Apr 22 19:21:42 2017

格式化

time.strftime(format[, t])
把一个代表时间的元组或者 struct_time 转为格式化的时间字符串. 如果 t 未指定,将调用 time.localtime() 的返回作为输入; 如果输入中任何一个元素越界将报 ValueError 异常。格式化参数如下:

指示

含义

笔记

%a

地区缩写的星期名
%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 标识 (1)
%S 秒 [00,61] (2)
%U 一年的周数 (周日为开始) 为十进制数 [00,53]; 第一个周日之前的新的一年的天数是第0周 (3)
%w 星期中的天数(0 – 6 ), 以周日为星期的开始
%W 和 %U 基本相同, 以周一为星期的开始 (3)
%x 区域相应的日期表示
%X 区域相应的时间表示
%y 去掉世纪的年份 [00 – 99] eg: 2017 –>17
%Y 完整的年份
%Z 时区的名称(如果没有时区则为空字符)
%% ‘%’ 字符

备注:

  • %p 只有与 %I 配合使用才有效果
  • 秒的范围是 0 – 61, 值 60 在表示闰秒的时间戳中有效, 而由于历史原因才支持 61
  • 当使用strptime()函数时, 只有当在这些年中指定周数和天数时 %U 和 %W 才会被计算
>>> time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime())
'Thu, 28 Jun 2001 14:17:15 +0000'

下面方式在给文件名等添加时间戳比较有用:

>>> time.strftime('%Y-%m-%d_%X',time.localtime())        
'2017-04-23_19:10:12'
>>>
>>> time.strftime("%Y-%m-%d_%H:%M:%S", time.gmtime())
'2017-04-22_19:13:13'

time.strptime(string[, format])
格式参数的用法与 strftime() 相同; 它默认为 “%a %b %d %H:%M:%S %Y” 与 ctime() 返回的格式匹配

Index Attribute Values
0 tm_year (for example, 2017)
1 tm_mon range [1, 12]
2 tm_mday range [1, 31]
3 tm_hour range [0, 23]
4 tm_min range [0, 59]
5 tm_sec range [0, 61]
6 tm_wday range [0, 6], Monday is 0
7 tm_yday range [1, 366]
8 tm_isdst 0, 1 or -1
>>> time.strptime("2017-04-22 19:27:23", "%Y-%m-%d %X")
time.struct_time(tm_year=2017, tm_mon=4, tm_mday=22, tm_hour=19, tm_min=27, tm_sec=23, tm_wday=5, tm_yday=112, tm_isdst=-1)

发表评论