我正在尝试将两次相加。ISO 8601 时间戳是“1984-06-02T19:05:00.000Z”,我想将其转换为秒。我尝试使用 Python 模块iso8601
,但它只是一个解析器。
有什么建议么?
如果您想获取自纪元以来的秒数,您可以使用python-dateutil
将其转换为datetime
对象,然后使用该strftime
方法将其转换为秒数。像这样:
>>> import dateutil.parser as dp
>>> t = '1984-06-02T19:05:00.000Z'
>>> parsed_t = dp.parse(t)
>>> t_in_seconds = parsed_t.timestamp()
>>> t_in_seconds
'455051100'
所以你已经完成了一半:)
您的日期是RFC 3339 格式的 UTC 时间,您可以仅使用 stdlib 解析它:
from datetime import datetime
utc_dt = datetime.strptime('1984-06-02T19:05:00.000Z', '%Y-%m-%dT%H:%M:%S.%fZ')
# Convert UTC datetime to seconds since the Epoch
timestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds()
# -> 455051100.0
另请参阅在 Python 中将 datetime.date 转换为 UTC 时间戳
如何将其转换回 ISO 8601 格式?
要将 POSIX 时间戳转换回来,请从中创建一个 UTC 日期时间对象,并使用.strftime()
以下方法对其进行格式化:
from datetime import datetime, timedelta
utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
print(utc_dt.strftime('%Y-%m-%dT%H:%M:%S.%fZ'))
# -> 1984-06-02T19:05:00.000000Z
注意:它在小数点后打印六位数字(微秒)。要获得三位数字,请参阅将微秒格式化为小数点后 2 位(实际上将微秒转换为数十微秒)。
这是 Python 3 中的解决方案:
$ date +%s
1428030452
$ TZ=US/Pacific date -d @1428030452 '+%Y%m%d %H:%M:%S %z'
20150402 20:07:32 -0700
$ TZ=US/Eastern date -d @1428030452 '+%Y%m%d %H:%M:%S %z'
20150402 23:07:32 -0400
$ python3
>>> from datetime import datetime,timezone
>>> def iso2epoch(ts):
... return int(datetime.strptime(ts[:-6],"%Y%m%d %H:%M:%S").replace(tzinfo=timezone.utc).timestamp()) - (int(ts[-2:])*60 + 60 * 60 * int(ts[-4:-2]) * int(ts[-5:-4]+'1'))
...
>>> iso2epoch("20150402 20:07:32 -0700")
1428030452
>>> iso2epoch("20150402 23:07:32 -0400")
1428030452
>>>