DateTime转换为纪元时间

时间:2014-08-24 13:54:52

标签: python date datetime time epoch

我需要使用Python< = 2.7

以格式转换存储在变量中的时间
07/20-10:38:04.360700

到纪元时间(自1970年1月1日午夜以来),就像这样

1405852684.360700

最好导入时间模块,还是只拆分并使用一些数学计算?

3 个答案:

答案 0 :(得分:2)

如果字符串日期是相对于UTC的,那么:

In [31]: import datetime as DT

In [32]: text = '07/20-10:38:04.360700'

In [33]: date = DT.datetime.strptime('2014/'+text, '%Y/%m/%d-%H:%M:%S.%f')

In [34]: (date - DT.datetime(1970,1,1)).total_seconds()
Out[34]: 1405852684.3607

如果字符串日期指的是与某个其他时区相关的日期,那么您可以使用pytz在进行计算之前使日期时区知道。例如,

import pytz
import datetime as DT

text = '07/20-10:38:04.360700'
tz = pytz.timezone('US/Eastern')
date = DT.datetime.strptime('2014/'+text, '%Y/%m/%d-%H:%M:%S.%f')
# interpret the date as coming from US/Eastern
date_tz = tz.localize(date) 

epoch = DT.datetime(1970,1,1, tzinfo=pytz.utc)
timestamp = (date_tz - epoch).total_seconds()
print(repr(timestamp))
# 1405867084.3607

答案 1 :(得分:1)

你可以使用python的timetuple()函数(和一点点数学)

>>> import datetime
>>> import time
>>> v = datetime.datetime(2014, 7, 20, 10, 38, 4, 360700)
>>> time.mktime(v.timetuple())
1405870684.0

现在我们需要你的微秒:

>>> time.mktime(v.timetuple())+(v.microsecond/1000000.)
1405870684.3607

答案 2 :(得分:1)

你没有指定年份,所以在这里我假设它是当年。以下假设所有时间都是UTC,即不是本地时间。

from datetime import datetime

time_string = '07/20-10:38:04.360700'
dt = datetime.strptime(time_string, '%m/%d-%H:%M:%S.%f')
dt = dt.replace(year=datetime.today().year)

>>> (dt - datetime.utcfromtimestamp(0)).total_seconds()
1405852684.3607