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


188

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

如何将此数字转换为datetime

Answers:


328

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)

它能回答您的问题吗?

编辑:JF塞巴斯蒂安正确建议使用真司1e3(浮动1000)。如果您想获得精确的结果,则差异非常明显,因此我更改了答案。所不同的结果在Python 2.x中的默认行为,它总是返回int分(当使用/运营商)intint(这就是所谓的地板事业部)。通过更换除数1000(作为一个int与所述)1e3除数(即的表示1000为float)或用float(1000)(或1000.等),分割变得真正分裂。的Python 2.x的收益float除以时int通过floatfloat通过intfloatfloat等而当在传递到时间戳一些小数部分fromtimestamp()的方法,该方法的结果也包含有关该小数部分的信息(如微秒的数量)。


13
使用真正的划分:/ 1e3
jfs

@JFSebastian:您完全正确,我已经编辑了答案,并添加了一些解释说明您为什么正确。如果您不同意该解释,请告诉我。
塔德克2012年

@ manu-fatto:没关系。x * 0.001并且x / 1e3都是相同的,所不同的是在符号和长度(原来的一个是短)。对于某些人来说,实际上将其除以数字而不是乘以您提出的可乘逆数(1/x)可能更清楚。但是,感谢您提出替代方法。
塔德克

58
此功能很危险,因为将您的时区考虑在内。尝试查找utcfromtimestamp
Haim Bender

12
@HaimBender谢谢!我觉得您的评论值得更多关注。fromtimestamp给您以本地时间显示utcfromtimestamp的日期和时间给您以UTC显示的日期和时间。
yusong
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.