【发布时间】:2013-08-12 05:18:53
【问题描述】:
我正在尝试将 Javascript API 调用转换为 Python。工作的 javascript 代码工作正常,生成一个像这样的时间戳:
var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
此结果(自纪元以来的秒数)随后被散列并在 API 调用中使用,但这是相关部分。如果有人可以让我知道转换它的正确方法,将不胜感激。
以下是不同方法的不同结果的一些详细信息:
Javascript(有效的 API 结果)
var curdate = new Date(2013, 7, 10);
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
结果:1376089200
Python(无效的 API 结果)
from datetime import datetime
import calendar
d = datetime(2013, 8, 10)
calendar.timegm(d.utctimetuple())
结果:1376092800
我显然遗漏了一些东西,有人可以告诉我吗?
更新
我最初在示例中犯了一个错误,因为 Javascript 使用基于 0 的日期,而 Python 的日期是基于 1 的。
Jonathon 友好地解释了值的差异是由于 Python 默认为 UTC 而 Javascript 默认为本地时区。就我而言,这是 GMT,这是 API 要求的。我现在只需要在 Python 中得到这个结果。
回答
解决方案是提供的时区不匹配。虽然我仍然遇到第三方 api 的问题,但我至少现在得到了正确的时间。
这可能可以清理:
from datetime import datetime
import calendar
import time
import pytz
def GenerateTimeStamp(d):
europe = pytz.timezone('Europe/London')
d = europe.localize(d)
tuple = d.utctimetuple()
timestamp = int(time.mktime(tuple))
return timestamp
只需提供一个日期时间:
GenerateTimeStamp(datetime(2013, 8, 10))
或
GenerateTimeStamp(datetime.utcnow())
附带说明一下,如果你正在尝试这个并想使用 pip 安装 pytz1,你可以使用 pre tag2 来获取它:
pip install --pre pytz
【问题讨论】:
标签: javascript python timestamp utc gmt