64

要在 JavaScript 中获取时间戳,我们使用

var ts = new Date().getTime()

datetime到目前为止,将其转换为 Python 的正确方法是什么?我使用以下代码

>>> jsts = 1335205804950
>>> dt = datetime.datetime.fromtimestamp(jsts/1000)
>>> dt
datetime.datetime(2012, 4, 24, 0, 30, 4)

我将时间戳除以 1000,因为我得到了类似的错误

ValueError                                Traceback (most recent call last)
1 d = datetime.datetime.fromtimestamp(a)
ValueError: year is out of range

苏丹。

4

4 回答 4

104

您当前的方法是正确的,除以 1000 是必要的,因为您的 JavaScript 以毫秒为单位返回时间戳,并datetime.datetime.fromtimestamp()期望以秒为单位的时间戳。

为了保持毫秒精度,您可以除以1000.0,因此您使用浮点除法而不是整数除法:

>>> dt = datetime.datetime.fromtimestamp(jsts/1000.0)
>>> dt
datetime.datetime(2012, 4, 23, 11, 30, 4, 950000)
于 2012-04-23T18:36:49.653 回答
2

我遇到了同样的问题,感谢@andrew-clark 的回答,我建立了一个小例子来处理这两种情况:

     try:
        # when timestamp is in seconds
        date = datetime.fromtimestamp(timestamp)
    except (ValueError):
        # when timestamp is in miliseconds
        date = datetime.fromtimestamp(timestamp / 1000)
于 2021-02-09T05:53:47.830 回答
1

您这样做的方式是正确的方式,因为 js 在日期/时间中包含毫秒。据我所知,Python(和 PHP)没有。为了更精确,您可以使用/1000.0.

于 2012-04-23T18:38:01.337 回答
1

对于其他人仍然遇到错误:我遇到了类似的问题,但 unix 时间戳以微秒为单位,即我必须将时间戳除以 1000000 才能获得正确的结果。

dt = datetime.datetime.fromtimestamp(1502360499615921)
于 2017-10-11T11:38:29.050 回答