我正在处理Python中的日期,我需要将它们转换为UTC时间戳以供使用
在Javascript。下面的代码不能工作:
>>> d = datetime.date(2011,01,01)
>>> datetime.datetime.utcfromtimestamp(time.mktime(d.timetuple()))
datetime.datetime(2010, 12, 31, 23, 0)
首先将date对象转换为datetime也没有帮助。我在这个链接中尝试了这个例子,但是:
from pytz import utc, timezone
from datetime import datetime
from time import mktime
input_date = datetime(year=2011, month=1, day=15)
现在:
mktime(utc.localize(input_date).utctimetuple())
or
mktime(timezone('US/Eastern').localize(input_date).utctimetuple())
做的工作。
一般问题:如何根据UTC将日期转换为从epoch开始的秒数?
这次深入的讨论给我留下了深刻的印象。
我的观点是:
from datetime import datetime
import time
utc格式的时间戳为:
timestamp = \
(datetime.utcnow() - datetime(1970,1,1)).total_seconds()
or,
timestamp = time.time()
if now的结果是datetime.now(),在相同的DST
utcoffset = (datetime.now() - datetime.utcnow()).total_seconds()
timestamp = \
(now - datetime(1970,1,1)).total_seconds() - utcoffset
一个完整的时间字符串包含:
日期
时间
utcoffset [+HHMM或-HHMM]
例如:
0000 == UNIX时间戳:3600
$ python3
>>> from datetime import datetime
>>> from calendar import timegm
>>> tm = '1970-01-01 06:00:00 +0500'
>>> fmt = '%Y-%m-%d %H:%M:%S %z'
>>> timegm(datetime.strptime(tm, fmt).utctimetuple())
3600
注意:
UNIX时间戳是一个浮点数,以UTC标准从epoch开始的秒数表示。
编辑:
$ python3
>>> from datetime import datetime, timezone, timedelta
>>> from calendar import timegm
>>> dt = datetime(1970, 1, 1, 6, 0)
>>> tz = timezone(timedelta(hours=5))
>>> timegm(dt.replace(tzinfo=tz).utctimetuple())
3600