JavaScript 时间戳到 Python 日期时间的转换

Posted

技术标签:

【中文标题】JavaScript 时间戳到 Python 日期时间的转换【英文标题】:JavaScript timestamp to Python datetime conversion 【发布时间】:2012-05-04 09:35:50 【问题描述】:

要在 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

苏丹。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

谢天谢地,这在 Python 3 中不是必需的。 @delnan 我在 python3 中有同样的问题:datetime.fromtimestamp(1485373592240) 失败,除非除以 1000 @jjj 我认为他的意思是在 python 3.x 中不需要浮点除法;我们有一个明确的整数除法运算符 - // - 所以如果你将 float 除以 int/,你会得到 float【参考方案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)

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

dt = datetime.datetime.fromtimestamp(1502360499615921)

【讨论】:

以上是关于JavaScript 时间戳到 Python 日期时间的转换的主要内容,如果未能解决你的问题,请参考以下文章

从时间戳到正常日期[重复]

在 SQL Server 中添加时间戳到日期

PHP时间戳到DateTime

将纪元时间(以毫秒为单位)转换为时间戳到 UTC 错误

熊猫桶时间戳到 TimeGrouper 频率组

从 BigQuery 格式化时间戳到 Google 电子表格