我在java中发现了一种我认为有点不同的行为。如果有人能够阐明我的问题,我将不胜感激。
我有一个项目在后端使用MongoDB,Spring Data MongoDB。这是一个android项目。
当我在mongoDB中的文档中插入日期字段时,它在mongoDB中被解释为ISODate。这将由我转换为java.util.Date
。我试图将此转换为此website中的unix时间戳,并在49311年输出一些日期。我将时间戳设为1493967548032
除此之外,当我尝试在python3.5中将此时间戳转换为自然的人类可读格式时,我得到OSError,其中说“无效的参数”。
timestamp = 1493967548032
datetime.datetime.fromtimestamp(timestamp)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-35-a8b8548bb1ff> in <module>()
----> 1 datetime.datetime.fromtimestamp(timestamp)
OSError: [Errno 22] Invalid argument
但是,java.util.Date数据类型对于相互理解相同的东西没有问题。他们将此时间戳解释为“2017年5月 - 05日”。我需要了解如何在python中解释这些java风格的时间戳,以便将来测试功能。
我使用的是Windows 10 x64计算机。
答案 0 :(得分:2)
Java的Date
在milliseconds中使用其参数:
public Date(long date)
分配一个Date对象并初始化它以表示指定的毫秒的数量,因为标准基准时间称为“epoch”,即1970年1月1日00:00:00 GMT。 / p>
Python的datetime.fromtimestamp
在seconds中使用其参数。
classmethod datetime.fromtimestamp(timestamp[, tz])
返回与 POSIX时间戳
对应的本地日期和时间
(POSIX时间戳以秒为单位)
所以,简单地将你的毫秒除以1000:
>>> datetime.datetime.fromtimestamp(1493967548032 / 1000)
datetime.datetime(2017, 5, 5, 7, 59, 8)
如果你想保持毫秒,请确保使用浮点运算:
>>> datetime.datetime.fromtimestamp((float) 1493967548032 / 1000)
datetime.datetime(2017, 5, 5, 7, 59, 8, 32000)
答案 1 :(得分:1)
在转换为日期之前将此值 1493967548032 除以千,因为参数的单位是秒,而不是毫秒。
这会产生:
>>> datetime.datetime.fromtimestamp(1493967548.032)
datetime.datetime(2017, 5, 5, 7, 59, 8, 32000)