java用什么来解释unix时间戳?

时间:2017-05-05 07:57:57

标签: java python mongodb

我在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计算机。

2 个答案:

答案 0 :(得分:2)

Java的Datemilliseconds中使用其参数:

public Date(long date)
     

分配一个Date对象并初始化它以表示指定的毫秒的数量,因为标准基准时间称为“epoch”,即1970年1月1日00:00:00 GMT。 / p>

Python的datetime.fromtimestampseconds中使用其参数。

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)