首先我们科普一下:
东八区(UTC/GMT+08:00)是比世界协调时间(UTC)/ 格林尼治时间 (GMT)快8小时的时区,理论上的位置是位于东经112.5度至127.5度之间,是东盟标准的其中一个候选时区。当 格林尼治标准时间 为0:00时,东八区的标准时间为08:00
这种时间的表示就是UTC通用标准时,以Z标识
少废话直接上代码
import time
str_time = '1970-01-19T15:59:38.721115895Z'
refactor_time = time.strptime(str(str_time.replace('T', ' ').replace('Z', '')[:-3]), "%Y-%m-%d %H:%M:%S.%f")
最终得到的refactor_time为time.struct_time(tm_year=1970, tm_mon=1, tm_mday=19, tm_hour=15, tm_min=59, tm_sec=38, tm_wday=0, tm_yday=19, tm_isdst=-1),接下来就可以用这个time相关的object进行之后的使用了,例如将其转换为自纪元以来的秒数,使用如下代码:
import calendar
second = calendar.timegm(refactor_time)
更多用法可以参考:time — 时间的访问和转换 — Python 3.9.2rc1 文档
接下来我们详细解释下第一段代码
str_time.replace('T', ' ').replace('Z', ''):将原始字符串格式中的T和Z替换为空格,变成strptime可以识别的字符串类型,这一步主要是字符串转换[:-3]:截取字符串/舍弃字符串最后三位,这里是895
这里这样的做的原因是,如果不舍弃会报错:
File “/usr/lib/python2.7/_strptime.py”, line 478, in _strptime_time return _strptime(data_string, format)[0] File “/usr/lib/python2.7/_strptime.py”, line 335, in _strptime data_string[found.end():]) ValueError: unconverted data remains: 895才想可能是小数点后太长了,因此这里截断一点
"%Y-%m-%d %H:%M:%S.%f":指定原始字符串时间的格式,大家应该比较熟悉了就不展开了,如果您完全不懂可以参考笔记—Python带有时区时间,格式化处理问题_BigBoy_Coder的博客-CSDN博客开头讲的部分.%f:唯一要强调的是这个部分,用来指定原始时间字符串秒位是有小数的,并且还不可以写%9f
否则会报错:
ValueError: '9' is a bad directive in format '%Y-%m-%d %H:%M:%S.%9f'