JavaScript时间戳转换为Python日期时间

75
在JavaScript中获取时间戳我们使用
var ts = new Date().getTime()

什么是将其转换为Python datetime的正确方法?到目前为止,我使用以下代码
>>> 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个回答

118

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

为了保留毫秒精度,您可以除以1000.0,这样就使用浮点数除法而不是整数除法:

>>> dt = datetime.datetime.fromtimestamp(jsts/1000.0)
>>> dt
datetime.datetime(2012, 4, 23, 11, 30, 4, 950000)

3
Python 3 幸运的是这不是必须的。 - user395760
1
@delnan 我在Python3中遇到了同样的问题:datetime.fromtimestamp(1485373592240) 除非除以 1000,否则会失败。 - jjj
4
我认为他的意思是在Python 3.x中浮点除法并不必要;我们有一个显式的整数除法运算符 - // - 因此,如果您使用 /float 除以 int,您将得到一个 float - ocket8888

4

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

     try:
        # when timestamp is in seconds
        date = datetime.fromtimestamp(timestamp)
    except (ValueError):
        # when timestamp is in miliseconds
        date = datetime.fromtimestamp(timestamp / 1000)

2
对于其他人仍然出现错误的情况:我遇到了类似的问题,但是Unix时间戳是以微秒为单位的,也就是说,我需要将时间戳除以1000000才能得到正确的结果。
dt = datetime.datetime.fromtimestamp(1502360499615921)

1

你现在的做法是正确的,因为 JavaScript 在日期/时间中包含毫秒。据我所知,Python(和 PHP)不包含毫秒。 如果需要更高的精度,可以使用 /1000.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接