如何将整数时间戳转换为日期时间

我有一个包含时间戳的数据文件,如“1331856000000”。不幸的是,我没有很多关于这种格式的文档,所以我不确定时间戳是如何格式化的。我尝试了Python的标准datetime.fromordinal()datetime.fromtimestamp()和其他一些,但都不匹配。我非常确定这个特定的数字对应于当前的日期(例如2012-3-16),但仅此而已。

如何将这个数字转换为datetime?

384103 次浏览

datetime.datetime.fromtimestamp()是正确的,只是时间戳可能以毫秒为单位(就像在JavaScript中一样),但fromtimestamp()需要Unix时间戳,以秒为单位。

这样做:

>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)

结果是:

>>> date
datetime.datetime(2012, 3, 16, 1, 0)

这回答了你的问题吗?

int0: J.F. Sebastian通过1e3正确地建议int1 (float 1000)。差异是显著的,如果你想得到精确的结果,因此我改变了我的答案。这种差异源于Python 2的默认行为。x,当(使用/操作符)int除以int(这被称为int2)时,它总是返回int。通过将除数1000(作为一个int)替换为1e3除数(表示1000为浮点数)或10000(或10001等),除法变成int3。Python 2。当int除以10002, 10002除以int10002除以10002等时,x返回10002。当传递给10009方法的时间戳中有一些小数部分时,该方法的结果也包含关于该小数部分的信息(如微秒数)。

或者,你可以使用pandas.to_datetime为自己选择单位和时区。这就避免了前面回答中提到的所有评论和问题:

import pandas as pd


pd.to_datetime(int('1331856000000'), utc=True, unit='ms')
# Timestamp('2012-03-16 00:00:00+0000', tz='UTC')

类似于@Tadek的答案

如果时间戳位于UTC时区(一种存储日期的常用方法),则应该使用

datetime.datetime.utcfromtimestamp()

如果你使用fromtimestamp,它会假设日期以你的本地时区表示