【问题标题】:How to convert integer timestamp to Python datetime如何将整数时间戳转换为 Python 日期时间
【发布时间】:2012-04-02 10:32:40
【问题描述】:

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

如何将此号码转换为datetime

【问题讨论】:

    标签: python datetime timestamp


    【解决方案1】:

    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)
    

    它回答了你的问题吗?

    编辑:J.F. Sebastian 正确地建议1e3(浮动1000使用真正的除法。如果您想获得精确的结果,差异很大,因此我改变了答案。差异源于 Python 2.x 的默认行为,当将(使用 / 运算符)int 除以 int(这称为 地板除法)时,它总是返回 int。通过用1e3 除数(将1000 表示为浮点数)或float(1000)(或1000. 等)替换除数1000(作为int),除数变为真正的划分。 Python 2.x 在将int 除以floatfloat 除以intfloat 除以float 等时返回float。并且当传递给fromtimestamp() 的时间戳中有一些小数部分时方法,此方法的结果还包含有关该小数部分的信息(作为微秒数)。

    【讨论】:

    • 使用真除法:/ 1e3
    • @J.F.Sebastian:你是完全正确的,我已经编辑了我的答案并添加了一些解释为什么你是对的。如果您不同意解释,请告诉我。
    • @manu-fatto:这并不重要。 x * 0.001x / 1e3 都是一样的,区别在于符号和长度(原来的更短)。对于某些人来说,实际除以数字而不是乘以您提出的 乘法逆 数 (1/x) 可能更清楚。但是感谢您提出替代方法。
    • 这个函数很危险,因为会考虑你的时区。尝试查找 utcfromtimestamp
    • @HaimBender 谢谢!我觉得你的cmets应该得到更多的关注。 fromtimestamp 为您提供当地时间的日期和时间 utcfromtimestamp 为您提供 UTC 的日期和时间。
    【解决方案2】:

    或者,您可以使用pandas.to_datetime 并选择您自己的单位和时区。这样就避免了上一个答案中提到的所有 cmets 和问题:

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

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多