Python与Javascript DateTime

Pau*_*ill 6 javascript python timestamp utc gmt

我正在尝试将Javascript API调用转换为Python.工作的JavaScript代码工作正常,生成这样的时间戳:

var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
Run Code Online (Sandbox Code Playgroud)

随后在API调用中对此结果(自纪元以来的这个秒数)进行散列并使用,但这是相关部分.如果有人能让我知道转换它的正确方法,那将非常感激.

以下是不同方法的不同结果的一些细节:

Javascript(有效的API结果)

var curdate = new Date(2013, 7, 10);
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;
Run Code Online (Sandbox Code Playgroud)

结果:1376089200

Python(无效的API结果)

from datetime import datetime
import calendar

d = datetime(2013, 8, 10)
calendar.timegm(d.utctimetuple())
Run Code Online (Sandbox Code Playgroud)

结果: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
Run Code Online (Sandbox Code Playgroud)

只需提供日期时间:

GenerateTimeStamp(datetime(2013, 8, 10))
Run Code Online (Sandbox Code Playgroud)

要么

GenerateTimeStamp(datetime.utcnow())
Run Code Online (Sandbox Code Playgroud)

作为旁注,如果您正在尝试这个并想要使用pip 安装pytz 1,您可以使用pre标签2来获取它:

pip install --pre pytz
Run Code Online (Sandbox Code Playgroud)

Jon*_*ski 6

对于JavaScript日期,month参数为0 - 11.所以,对于八月,你会想要通过7.

表示月份的整数值,从1月的0开始到12月的11.

它们也有不同的默认时区,Python默认为UTC,而JavaScript默认为用户的" 本地 "时区.

您可以使用Date.UTC(),返回时间戳,用于JavaScript中的等效项.

var utc = Date.UTC(2013, 7, 10) / 1000;
// 1376092800
Run Code Online (Sandbox Code Playgroud)

附注:您可以使用getTime()获取时间戳Date.

var curdate = new Date(2013, 7, 10);
var utc = curdate.getTime() / 1000;
Run Code Online (Sandbox Code Playgroud)