Python time 模块
time
模块暴露了底层 C 语言库中的时间相关函数。它包含了检索时钟时间(clock time)和处理器运行时间的函数,以及基本的解析工具和字符串格式化工具。
datetime
模块为日期,时间,以及两者的结合提供了一个更高级的接口。datetime 中的类支持四则运算,大小比较,还有时区配置。
calendar
模块创建了数周,数月,数年的的格式化表示。它也可以用来计算周期性的事件,计算给定日期是一周中的第几天,以及计算其他基于日历的值。
日期可以是实数(1970 年 1 月 1 日 0 点开始计算到现在的秒数),或者是包含有9的整数的元组。比如:(2008, 1, 21, 12, 2, 56, 0, 21, 0)
,表示 2008 年 1 月 21 日 12 时 2 分 56 秒,星期一,并且是当年的第 21 天。
夏令时的数字是布尔值,如果使用了-1,mktime(将这样的元组转换为时间戳)就会工作正常。
time.time()
返回当前时间的秒数(以UTC为准),float 类型。
>>> import time
>>> time.time()
1539249629.6654336
>>> time.time_ns() # 但返回当前时间的整数纳秒,New in version 3.7.
1539250044424859600
time.struct_time 类型
time.struct_time 是 gmtime(), localtime(), strptime() 返回的时间值序列的类型。
它是一个具有命名元组接口的对象:可以通过索引和属性名访问值,存在如下索引和属性名:
索引 | 属性名 | 字段 | 值 |
---|---|---|---|
0 | tm_year | 年 | 比如2001,2002等 |
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 | 周 | 周一为0,0~6,-1为一周中的某天,Python会自己计算 |
7 | tm_yday | 儒历日(公历) | 1~366,-1为一年中的某天,Python会自己计算 |
8 | tm_isdst | 夏令时(国内不使用) | 0,1,-1 |
N/A | tm_zone | 时区名称的缩写 | New in version 3.6 |
N/A | tm_gmtoff | offset east of UTC in seconds | New in version 3.6 |
time.time() 与 time.struct_time 之间转换
time.gmtime() 函数返回 UTC (世界标准时间)中的当前时间。
time.gmtime() 和 calendar.timegm() 彼此相反
>>> t = time.time()
>>> t
1539251123.3449502
>>> time.gmtime(t)
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=11, tm_hour=9, tm_min=45, tm_sec=23, tm_wday=3, tm_yday=284, tm_isdst=0)
>>> import calendar
>>> t = time.time()
>>> calendar.timegm(time.gmtime(t))
1547708725
>>> t
1547708725.850669
time.localtime() 函数返回的是与当前时区相对应的当前时间。
time.localtime() 和 time.mktime() 彼此相反
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=11, tm_hour=17, tm_min=46, tm_sec=12, tm_wday=3, tm_yday=284, tm_isdst=0)
>>> time.localtime(1539251123.3449502)
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=11, tm_hour=17, tm_min=45, tm_sec=23, tm_wday=3, tm_yday=284, tm_isdst=0)
>>> time.mktime(time.localtime())
1539251179.0
>>> time.mktime(time.gmtime(t))
1539222323.0
时间元组与字符串之间转换
time.asctime([tuple])
函数,将时间元组转换为字符串
>>> import time
>>> time.asctime()
'Sun Sep 25 13:56:57 2016'
>>> time.asctime((2008, 1, 21, 12, 2, 56, 0, 21, 0))
'Mon Jan 21 12:02:56 2008'
time.strftime(format[, tuple])
的使用格式为:
%y
两位数的年份表示(00-99)%Y
四位数的年份表示(000-9999)%m
月份(01-12)%d
月内中的一天(01-31)%H
24小时制小时数(0-23)%I
12小时制小时数(01-12)%M
分钟数(00=59)%S
秒(00-59)%a
本地简化星期名称%A
本地完整星期名称%b
本地简化的月份名称%B
本地完整的月份名称%c
本地相应的日期表示和时间表示%j
年内的一天(001-366)%p
本地A.M.或P.M.的等价符%U
一年中的星期数(00-53)星期天为星期的开始%w
星期(0-6),星期天为星期的开始%W
一年中的星期数(00-53)星期一为星期的开始%x
本地相应的日期表示%X
本地相应的时间表示%Z
当前时区的名称%%
%号本身
>>> time.strftime('%y-%Y-%m-%d-%H-%I-%M-%S', (2008, 1, 21, 12, 2, 56, 0, 21, 0))
'08-2008-01-21-12-12-02-56'
>>> time.strftime('%a-%A-%b-%B-%c-%j-%p-%U-%w-%W=%x-%X-%Z-%%', (2008, 1, 21, 12, 2, 56, 0, 21, 0))
'Mon-Monday-Jan-January-Mon Jan 21 12:02:56 2008-021-PM-03-1-03=01/21/08-12:02:56-中国标准时间-%'
>>> time.strftime('%y-%Y-%m-%d-%H-%I-%M-%S') # 默认使用 localtime() 返回的当前时间
'19-2019-01-17-16-04-19-44'
time.strptime(string[, format])
函数,将 asctime
格式化过的字符串转换为日期元组(可选格式化参数和 strftime
的一样)
>>> time.strptime('161010080808','%y%m%d%H%M%S')
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=10, tm_hour=8, tm_min=8, tm_sec=8, tm_wday=0, tm_yday=284, tm_isdst=-1)
>>> time.strptime('Sun Sep 25 13:56:57 2016') # 默认使用 time.ctime() "%a %b %d %H:%M:%S %Y"
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=25, tm_hour=13, tm_min=56, tm_sec=57, tm_wday=6, tm_yday=269, tm_isdst=-1)
>>> time.ctime(1548566033)
'Sun Jan 27 13:13:53 2019'
time.sleep(secs)
time.sleep(secs)
函数,让解释器等待给定的时间。
另请参阅
应用
获取两个日期之间的所有日期的列表
from datetime import datetime, timedelta
def gen_dates(b_date, days):
day = timedelta(days=1)
for i in range(days):
yield b_date + day * i
def get_date_list(start=None, end=None):
"""
获取日期列表
:param start: 开始日期
:param end: 结束日期
:return:
"""
if start is None:
start = datetime.strptime("2019-01-01", "%Y-%m-%d")
if end is None:
end = datetime.now()
data = []
for d in gen_dates(start, (end - start).days):
data.append(d)
return data
if __name__ == "__main__":
print(get_date_list())
"""
[datetime.datetime(2019, 1, 1, 0, 0), datetime.datetime(2019, 1, 2, 0, 0), datetime.datetime(2019, 1, 3, 0, 0)]
"""
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:Python time 模块
文章字数:1.5k
本文作者:Bin
发布时间:2018-10-11, 16:41:44
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2018/10/11/Python/Python%20time%20%E6%A8%A1%E5%9D%97/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。