Python:将日期从字符串转换为数字

时间:2015-09-22 21:49:55

标签: python string time char

我有一个简单的问题。我需要将字符串格式的日期转换为数字:

time = '2014-03-05 07:22:26.976637+00:00'
type(time)
      str

我想将此日期转换为唯一编号

谢谢。

2 个答案:

答案 0 :(得分:3)

在Python 3.7 +中:

>>> from datetime import datetime
>>> datetime.fromisoformat('2014-03-05 07:22:26.976637+00:00').timestamp()
1394004146.976637

有两个步骤:

Convert input rfc-3339 time string into datetime object

#!/usr/bin/env python
from datetime import datetime

time_str = '2014-03-05 07:22:26.976637+00:00'
utc_time = datetime.strptime(time_str[:26], '%Y-%m-%d %H:%M:%S.%f')
assert time_str[-6:] == '+00:00'

Find number of the microseconds since Epoch for given datetime

from datetime import datetime, timedelta

epoch = datetime(1970, 1, 1)

def timestamp_microsecond(utc_time):
    td = utc_time - epoch
    assert td.resolution == timedelta(microseconds=1)
    return (td.days * 86400 + td.seconds) * 10**6 + td.microseconds

print(timestamp_microsecond(utc_time))
# -> 1394004146976637

优点是您可以将此唯一编号转换回相应的UTC时间:

utc_time = epoch + timedelta(microseconds=1394004146976637)
# -> datetime.datetime(2014, 3, 5, 7, 22, 26, 976637)

如果您需要支持任意utc偏移(不仅仅是UTC时间),请按照链接进行操作。

如果您需要接受闰秒作为输入时间;见Python - Datetime not accounting for leap second properly?

答案 1 :(得分:1)

  

我想将此日期转换为唯一编号

标准的unix要做的事情就是从epoch开始转换为秒。但是,如果您只想要一个唯一的数字:

>>> time = '2014-03-05 07:22:26.976637+00:00'
>>> int(''.join(c for c in time if c.isdigit()))
201403050722269766370000L

如果您想要一个python datetime对象,而不是唯一的数字,那么使用:

>>> from dateutil import parser
>>> dt = parser.parse(time)
>>> dt
datetime.datetime(2014, 3, 5, 7, 22, 26, 976637, tzinfo=tzutc())