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) 函数,让解释器等待给定的时间。

另请参阅

https://docs.python.org/3/library/time.html

应用

获取两个日期之间的所有日期的列表

https://blog.csdn.net/zgljl2012/article/details/71636991

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" 转载请保留原文链接及作者。

目录