Cer*_*rin 161 python datetime timestamp
我有一个包含时间戳的数据文件,如"1331856000000".不幸的是,我没有很多关于格式的文档,所以我不确定时间戳是如何格式化的.我已经尝试过Python的标准datetime.fromordinal()
和datetime.fromtimestamp()
其他一些标准,但没有任何匹配.我很确定特定的数字对应于当前日期(例如2012-3-16),但不是更多.
如何将此数字转换为datetime
?
Tad*_*eck 286
datetime.datetime.fromtimestamp()
是正确的,除了你可能有几百毫秒的时间戳(如在JavaScript中),但fromtimestamp()
需要Unix时间戳,以秒为单位.
这样做:
>>> import datetime
>>> your_timestamp = 1331856000000
>>> date = datetime.datetime.fromtimestamp(your_timestamp / 1e3)
Run Code Online (Sandbox Code Playgroud)
结果是:
>>> date
datetime.datetime(2012, 3, 16, 1, 0)
Run Code Online (Sandbox Code Playgroud)
它能回答你的问题吗?
编辑:JF塞巴斯蒂安正确建议使用真司的1e3
(浮动1000
).差异很大,如果你想获得精确的结果,那么我改变了我的答案.差异来自Python 2.x的默认行为,它int
在将(使用/
运算符)int
除以int
(这称为floor division)时总是返回.通过更换除数1000
(作为一个int
与所述)1e3
除数(即的表示1000
为float)或用float(1000)
(或1000.
等),分割变得真正分裂.Python 2.x float
在int
by float
,float
by int
,float
by float
等时返回.当传递给fromtimestamp()
方法的时间戳中有一些小数部分时,此方法的结果还包含有关该小数部分的信息(以微秒数表示).
My *_*ork 14
或者,您可以使用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')
Run Code Online (Sandbox Code Playgroud)
类似于@Tadek 的回答
如果时间戳采用 UTC 时区(存储日期的常见方式),您应该使用
datetime.datetime.utcfromtimestamp()
Run Code Online (Sandbox Code Playgroud)
如果您使用fromtimestamp
它将假定日期以您当地的时区表示