我正在尝试将Javascript API调用转换为Python。工作的javascript代码工作正常,生成的时间戳如下:
var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
这个结果(从epoch到epoch的秒数)随后被散列并在API调用中使用,但这是相关的部分。如果有人能让我知道正确的方法来转换这将是非常感谢。在
以下是不同方法的不同结果的一些详细信息:
结果:1376089200
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标记2:
pip install --pre pytz
除了上面Jonathan的回答之外,我还可以在python方面推荐:
将返回:“1376107200”
对于JavaScript日期,^{} argument is 0 - 11 。因此,对于8月份,您将希望通过
7
。在它们还有不同的默认时区,Python默认为UTC,而JavaScript默认为用户的“local”时区。在
在JavaScript中,可以使用返回时间戳的^{} 。在
旁注:您可以使用^{} 来获取
^{pr2}$Date
的时间戳。在在javascript中,
new Date(2013, 8, 10)
表示2013年9月10日。在datetime(2013, 8, 10)
在Python中是指2013年8月10日。在你在比较两个不同的日期。在
本地时间与UTC
结果可能不同(我的系统时区:亚洲/首尔)。在
javascript
Python
^{pr2}$见Python - calendar.timegm() vs. time.mktime()
相关问题 更多 >
编程相关推荐