• Python 日期和时间戳的转换


    Python 日期和时间戳的转换

    1. Python中处理时间的模块

    Python中处理时间的模块有timedatetimecalendar

    在Python中表示时间的方式:

    • 时间戳:10位整数位和若干小数位,例如 1551153156.6358607
    • 元组(struct_time):  含有9个元素的元组,例如 (tm_year=2011, tm_mon=9, tm_mday=28, tm_hour=10, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=271, tm_isdst=-1)
    • 格式化字符串: 格式化的时间字符串, 例如 '2019-02-26 12:45:46'

    time模块,以元组(struct_time)为核心实现时间戳和格式化时间字符串的相互转换。

    datetime模块,以datetime类实例对象为核心实现时间戳和格式化时间字符串的相互转换。

    2. Python的time模块

    time模块是通过调用C库实现的,所以在有些平台上无法使用。大部分接口和C标准库的time.h一致。

    使用time模块来进行格式化时间字符串和时间戳的相互转换。

    2.1 将时间戳转换为格式化字符串

    使用time模块获取当前时间的时间戳:   

    >>> import time
    >>> time.time()
    1551157481.034565

     将时间戳转换为元组(struct_time):

    >>> time.localtime(time.time())
    time.struct_time(tm_year=2019, tm_mon=2, tm_mday=26, tm_hour=13, tm_min=2, tm_sec=1, tm_wday=1, tm_yday=57, tm_isdst=0)

    元组(struct_time)转换为格式化时间字符串

    >>> time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
    '2019-02-26 13:04:41'

    2.2 将格式化字符串转换为时间戳

    将格式化时间字符串'2019-02-26 13:04:41'转换为时间戳。

    格式化时间字符串转换为元组(struct_time):

    >>> str_time = '2019-02-26 13:04:41'
    >>> time.strptime(str_time, '%Y-%m-%d %H:%M:%S')
    time.struct_time(tm_year=2019, tm_mon=2, tm_mday=26, tm_hour=13, tm_min=4, tm_sec=41, tm_wday=1, tm_yday=57, tm_isdst=-1)

    元组(struct_time)转换为时间戳

    >>> time.mktime(time.strptime(str_time, '%Y-%m-%d %H:%M:%S'))
    1551157481.0

    2.3 使用time模块获取当前日期和时间

    使用time模块获取当前日期(使用当前时间的struct_time作为缺省参数)

    >>> time.strftime('%Y-%m-%d')
    '2019-02-26'

    使用time模块获取当前时间(使用当前时间的struct_time作为缺省参数)

    >>> time.strftime('%H:%M:%S')
    '13:21:13'

    3. Python 的datetime模块

    和time模块相比,datetime模块提供更直接易用的接口,功能也更加强大。

    datetime模块提供了处理日期和时间的类,既有简单的方式,也有复杂的方式。它虽然支持日期和时间算法,但其实现是重点是输出的格式化操作和更加有效的属性提取功能。

    3.1 datetime模块中定义的类

    datetime模块中定义的类(这些类的对象都是不可变的):

    • datetime.date: 表示日期,常用的属性有year、month和day
    • datetime.time: 表示时间,常用的属性有hour、minute、second和microsecond
    • datetime.datetime: 表示日期时间
    • datetime.timedelta: 表示两个date、time和datetime实例之间的时间间隔,最小单位可达微秒
    • datetime.tzinfo: 时区相关对象的抽象基类,由time和datetime类使用
    • datetime.timezone: Python3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量

    3.2 使用datetime模块中的datetime类将时间戳转换为格式化时间字符串

    使用datetime类将时间戳转换为datetime实例

    >>> import time
    >>> from datetime import datetime
    >>> dt = datetime.fromtimestamp(time.time())
    >>> dt
    datetime.datetime(2019, 2, 26, 15, 27, 28, 678923)

    datetime实例转换为格式化字符串

    >>> dt.strftime('%Y-%m-%d %H:%M:%S')
    '2019-02-26 15:27:28'

    3.3 使用datetime模块中的datetime类将格式化时间字符串转换为时间戳

    使用datetime类将格式化字符串'2019-02-26 15:27:28'转换为datetime实例

    >>> st = '2019-02-26 15:27:28'
    >>> dt = datetime.strptime(st, '%Y-%m-%d %H:%M:%S')
    >>> dt
    datetime.datetime(2019, 2, 26, 15, 27, 28)

    datetime实例转转为元组(struct_time)

    >>> tp = dt.timetuple()
    >>> tp
    time.struct_time(tm_year=2019, tm_mon=2, tm_mday=26, tm_hour=15, tm_min=27, tm_sec=28, tm_wday=1, tm_yday=57, tm_isdst=-1)

    元组(struct_time)转换为时间戳

    >>> time.mktime(tp)
    1551166048.0

    也可以直接使用datetime实例的timestamp()函数直接获取时间戳:

    >>> dt.timestamp()
    1551166048.0

    3.4 使用datetime类获取当前日期和时间

    使用datetime类获取当前日期

    >>> datetime.now().date().strftime('%Y-%m-%d')
    '2019-02-26'

    使用datetime类获取当前时间

    >>> datetime.now().time().strftime('%H:%M:%S')
    '15:48:43'

    4. 参考资料

  • 相关阅读:
    POJ 3126 Prime Path
    POJ 2429 GCD & LCM Inverse
    POJ 2395 Out of Hay
    【Codeforces 105D】 Bag of mice
    【POJ 3071】 Football
    【POJ 2096】 Collecting Bugs
    【CQOI 2009】 余数之和
    【Codeforces 258E】 Devu and Flowers
    【SDOI 2010】 古代猪文
    【BZOJ 2982】 combination
  • 原文地址:https://www.cnblogs.com/strivepy/p/10436213.html
Copyright © 2020-2023  润新知