6

在 Python 中,使用 calendar.timegm(),我得到一个 10 位的 unix 时间戳结果。当我将它放入 Javscript 的 setTime() 函数时,它会显示 1970 年的日期。它显然需要一个 13 位长的 unix 时间戳。这怎么可能发生?它们都是从同一日期开始计算的吗?

如何在这两种语言之间使用相同的 unix 时间戳?

在 Python 中:

In [60]: parseddate.utctimetuple()
Out[60]: (2009, 7, 17, 1, 21, 0, 4, 198, 0)
In [61]: calendar.timegm(parseddate.utctimetuple())
Out[61]: 1247793660

在萤火虫中:

>>> var d = new Date(); d.setTime(1247793660); d.toUTCString()
"Thu, 15 Jan 1970 10:36:55 GMT"
4

4 回答 4

11

timegm 基于 Unix 的gmtime()方法,它返回自 1970 年 1 月 1 日以来的秒数。

Javascripts setTime()方法是自该日期以来的毫秒数。您需要将秒数乘以 1000 才能转换为 Javascript 预期的格式。

于 2009-07-03T01:00:52.497 回答
9

以下是我用来与 javascript/datetime 相互转换的几个 python 方法。

def to_datetime(js_timestamp):
    return  datetime.datetime.fromtimestamp(js_timestamp/1000)

def js_timestamp_from_datetime(dt):
    return 1000 * time.mktime(dt.timetuple())

在javascript中你会这样做:

var dt = new Date();
dt.setTime(js_timestamp);
于 2009-07-03T01:07:04.403 回答
2

您是否可能混淆了自 1970 年以来的秒数和自 1970 年以来的毫秒数?

于 2009-07-03T00:59:42.173 回答
1

JavaScript Date 构造函数使用毫秒,您应该将 Python Unix 时间乘以 1000。

var unixTimestampSeg = 1247793660;
var date = new Date(unixTimestampSeg*1000);
于 2009-07-03T01:00:10.330 回答