# Python 日期时间与字符串的相互转换

    xiaoxiao2022-07-03  128

    Python 日期时间与字符串的相互转换

    Python 程序中经常要用到日期时间相关的功能。这里简单总结一下。

    表示日期时间常用三种形式:

    秒为单位的浮点数struct_time 元组时间字符串

    第一种方式是效率最高的,但是输出的结果对用户不友好。比如下面的例子:

    import time; # 引入time模块 ticks = time.time() print ("当前时间戳为:", ticks)

    输出的结果是:

    当前时间戳为: 1558496090.8486245

    这里的 1558496090.8486245 就是表示时间的浮点数。如果我们只需要精确到秒,可以忽略小数点后面的部分。

    秒为单位的浮点数 转换为 时间元组

    我们可以通过 time.localtime() 将其转化为时间元组:

    tm_struct = time.localtime(ticks) print(tm_struct)

    得到的结果如下:

    time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)

    这个结果说明 1558496090.8486245 表示的时间是: 2019-5-22 11:34:50 周三,是今年的第 142 天

    有时我们需要得到 格林威治时间,那么可以用 time.gmtime() 函数:

    time.gmtime(ticks)

    输出如下:

    time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=3, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)

    因为北京在东 8 区,所以我们的时间比格林威治时间超前 8 个小时。

    时间元组转换为秒为单位的浮点数

    使用 time.mktime() 函数可以实现时间元组转换为秒为单位的浮点数。

    下面是一个例子:

    time.mktime(tm_struct)

    输出结果如下:

    1558496090.0

    可以看到,小数点后面的部分被抹去了。因为时间元组只能精确到秒。

    时间元组转换为时间字符串

    转换方法有很多,最简单的是 asctime():

    time_str = time.asctime( tm_struct ) print(time_str)

    输出的结果如下:

    Wed May 22 11:34:50 2019

    这样得到的字符串我们无法控制格式。如果要精确控制格式,我们可以使用 strftime():

    time.strftime("%Y-%m-%d %H:%M:%S", tm_struct) time.strftime("%a %b %d %H:%M:%S %Y", tm_struct)

    输出的结果如下:

    '2019-05-22 11:34:50' 'Wed May 22 11:34:50 2019'

    strftime 支持的格式控制包括:

    %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-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.strptime() 可以完成这个转换,下面是个例子:

    tm2_struct = time.strptime('2019-05-22 11:34:50', "%Y-%m-%d %H:%M:%S") print(tm2_struct)

    输出的结果如下:

    time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=-1)

    秒为单位的浮点数 转换为 时间字符串

    time.ctime() 类似于 time.asctime(), 请看下面的例子:

    time.ctime(ticks)

    输入结果如下:

    'Wed May 22 11:34:50 2019'

    如果想精确控制输出的字符串,我没查到有现成的函数。估计只能先转成元组,然后在格式化成字符串。 我自己写了个转换函数:

    def time2str(ticks, fmt='%a %b %d %H:%M:%S %Y'): tm = time.localtime(ticks) return time.strftime(fmt, tm)

    测试代码:

    time2str(ticks, "%Y-%m-%d %H:%M:%S")

    输出结果如下:

    '2019-05-22 12:54:36'

    时间字符串 转换为 秒为单位的浮点数

    这个我也没查到有函数能直接做这个转换。但是我们可以自己写一个。

    def str2time(str, fmt='%a %b %d %H:%M:%S %Y'): tm = time.strptime(str, fmt) return time.mktime(tm)

    下面是个简单的测试用例:

    str2time('2019-05-22 11:34:50', "%Y-%m-%d %H:%M:%S")

    输出结果如下:

    1558496090.0
    最新回复(0)