【问题标题】:Fetching datetime from float in Python从 Python 中的浮点数中获取日期时间
【发布时间】:2011-10-06 01:56:26
【问题描述】:

如何在 Python 中从 float 获得 datetime

例如,我有一个浮点数,例如 43111.0,我想为此获取 datetime

【问题讨论】:

  • 43111.0 应该是什么?这是一些奇怪的非标准时间戳吗?
  • 43111 是 2018 年 1 月 11 日的数字格式。
  • 你有这方面的规范吗?
  • @Jacob 通常是一个浮点数,因为日期是自纪元以来的天数。小数点左边的所有内容通常是秒或毫秒。

标签: python datetime


【解决方案1】:
import datetime, time

print datetime.datetime.fromtimestamp(time.time())
print datetime.datetime.fromtimestamp(43111.0)

【讨论】:

  • 感谢您的回答,但 43111.0 不是时间戳,它是 2018 年 1 月 11 日的浮点数格式。
【解决方案2】:

所以,有一点数学:

如果 43111 是 2018 年 1 月 11 日,则 0 是 1899 年 12 月 30 日。 Python有datetime.date.fromordinal()

返回与预测的公历序数对应的日期, 其中第 1 年的 1 月 1 日的序数为 1。除非 1,否则会引发 ValueError

如果你将它与偏移一起使用,你有:

>>> dateoffset = 693594
>>> datetime.date.fromordinal(dateoffset + 43111)
datetime.date(2018, 1, 11)

希望对您有所帮助,即使它不适用于浮动。

【讨论】:

  • 如果使用序数,则必须单独处理小数部分:(
【解决方案3】:

看起来像 Excel 日期时间格式,称为 serial date。快速而肮脏的转换方式:

>>> import datetime
>>> serial = 43111.0
>>> seconds = (serial - 25569) * 86400.0
>>> datetime.datetime.utcfromtimestamp(seconds)
datetime.datetime(2018, 1, 11, 0, 0)

【讨论】:

  • 在我看来,这并不太脏,因为 Excel 日期实际上只是一个具有不同起点的时间戳。需要注意的两件事:(1) fromtimestamp() 包括时区信息,这可能是可取的,也可能不是可取的(我猜通常是不可取的 - 请注意结果末尾的 2, 0)。要摆脱这种情况,请改用 utcfromtimestamp() 。 (2) 此方法不支持早于 1970 年的日期。
  • 编辑了我的答案以使用 utcfromtimestamp() :)
  • 现在是 2022 年,@tuomur 的回复拯救了我的一天! :)
【解决方案4】:

试试这个:

from datetime import datetime

datetime.fromtimestamp(*your_timestamp_here*).strftime('%Y-%m-%d')

【讨论】:

    【解决方案5】:

    这是另一种方式

    from pyxlsb import convert_date
    convert_date(value)
    

    你可以使用

    format(convert_date(value), '%m/%d/%Y')
    

    如果你想格式化它。

    【讨论】:

    • 来自 .xlsb 不少于 tyvm
    猜你喜欢
    • 2019-01-21
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多