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

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 floatintby float,floatby int,floatby float等时返回.当传递给fromtimestamp()方法的时间戳中有一些小数部分时,此方法的结果还包含有关该小数部分的信息(以微秒数表示).

  • 此功能很危险,因为需要考虑时区.尝试查看utcfromtimestamp (52认同)
  • 使用真正的除法:`/ 1e3` (10认同)
  • @HaimBender谢谢!我觉得你的评论值得更多关注.`fromtimestamp`以当地时间为您提供日期和时间`utcfromtimestamp`为您提供UTC的日期和时间. (9认同)
  • 我发现写x*0.001而不是x/1e3更清楚 (3认同)

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)


Jam*_*zba 6

类似于@Tadek 的回答

如果时间戳采用 UTC 时区(存储日期的常见方式),您应该使用

datetime.datetime.utcfromtimestamp()
Run Code Online (Sandbox Code Playgroud)

如果您使用fromtimestamp它将假定日期以您当地的时区表示

  • 这会产生一个简单的日期时间对象,稍后可能会被解释为本地时间而不是 UTC。文档建议使用“datetime.fromtimestamp(timestamp, tz=timezone.utc)”。 (3认同)