在Python中将ISO 8601日期时间转换为秒

时间:2014-12-02 09:03:29

标签: python python-2.7 time iso8601 rfc3339

我想把两次加在一起。 ISO 8601时间戳是'1984-06-02T19:05:00.000Z',我想将其转换为秒。我尝试使用Python模块iso8601,但它只是一个解析器。

有什么建议吗?

3 个答案:

答案 0 :(得分:17)

如果您想获得自纪元以来的秒数,可以使用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.strftime('%s')
>>> t_in_seconds
'455047500'

所以你在那里一半:)

答案 1 :(得分:13)

您的日期是RFC 3339 format中的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

另请参阅 Converting datetime.date to UTC timestamp in Python

  

如何将其转换回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

注意:它在小数点后面打印六位数字(微秒)。要获得三位数,请参阅 Formatting microseconds to 2 decimal places (in fact converting microseconds into tens of microseconds)

答案 2 :(得分:0)

这是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
>>>