Python与Javascript DateTim

2024-09-29 22:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将Javascript API调用转换为Python。工作的javascript代码工作正常,生成的时间戳如下:

var curdate = new Date();
var gmtstring = curdate.toGMTString();
var utc = Date.parse(gmtstring) / 1000;

这个结果(从epoch到epoch的秒数)随后被散列并在API调用中使用,但这是相关的部分。如果有人能让我知道正确的方法来转换这将是非常感谢。在

以下是不同方法的不同结果的一些详细信息:

Javascript(有效的API结果)

^{pr2}$

结果: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标记2

pip install --pre pytz

Tags: 方法fromimportapidatetimedatevar时间
3条回答

除了上面Jonathan的回答之外,我还可以在python方面推荐:

 d = datetime(2013, 8, 10)
 d.strftime("%s")

将返回:“1376107200”

对于JavaScript日期,^{} argument is 0 - 11。因此,对于8月份,您将希望通过7。在

Integer value representing the month, beginning with 0 for January to 11 for December.

它们还有不同的默认时区,Python默认为UTC,而JavaScript默认为用户的“local”时区。在

在JavaScript中,可以使用返回时间戳的^{}。在

var utc = Date.UTC(2013, 7, 10) / 1000;
// 1376092800

旁注:您可以使用^{}来获取Date的时间戳。在

^{pr2}$

在javascript中,new Date(2013, 8, 10)表示2013年9月10日。在

datetime(2013, 8, 10)在Python中是指2013年8月10日。在

你在比较两个不同的日期。在

本地时间与UTC

结果可能不同(我的系统时区:亚洲/首尔)。在

javascript

> new Date(2013, 7, 10) / 1000
1376060400
> Date.UTC(2013, 7, 10) / 1000
1376092800

Python

^{pr2}$

Python - calendar.timegm() vs. time.mktime()

相关问题 更多 >

    热门问题