【问题标题】:How to convert unixtime to datetime by oneself如何自己将unixtime转换为datetime
【发布时间】:2018-04-13 10:06:26
【问题描述】:

我想在不使用 datetime.fromtimestamp 的情况下将 unixtime 转换为 datetime。

你知道如何在 Python 中创建将 unixtime 转换为 datetime 的方法吗?

【问题讨论】:

  • 您可以尝试查看 datetime 模块源代码并将该逻辑从 C 转换为纯 Python:github.com/python/cpython/blob/2.7/Modules/…
  • 我做到了。但是我想在 1900 年之前转换日期时间
  • datetime.fromtimestamp(-22000000000) == datetime(1272, 11, 5, 9, 46, 48) 使用我的 Python 2.7。
  • 谢谢。我可以做到@Boldewyn

标签: python python-2.7 datetime unix-timestamp


【解决方案1】:

我强烈建议您不要这样做,至少在您对问题集有更广泛的了解之前。一个非常幼稚的方法可能看起来像这样(不要使用这个!):

def timestamp_to_datetime(ts):
    year = 1970 + ts // (60*60*24*365)
    day_in_year = ts % (60*60*24*365) // (60*60*24)
    hour = ts % (60*60*24*365) % (60*60*24) // (60*60)
    minute = ts % (60*60*24*365) % (60*60*24) % (60*60) // 60
    second = ts % (60*60*24*365) % (60*60*24) % (60*60) % 60

    month = day_in_year // 30
    day = day_in_year % 30

    return datetime(year=year, month=month, day=day, hour=hour,
                    minute=minute, second=second)

当然,这个简单函数的结果与正确的日期相去甚远。我们假设每个月有 30 天只是冰山一角。

  • 无闰年:因此我们单独休息 13 天
  • 无时区:是 UTC 时间戳吗?当地时间?哪一个?
  • leap seconds:结果会以微妙的方式关闭
  • 对于负时间戳,我们在datetime() 构造函数中得到负的day_in_year 和直接的ValueError。您需要分别处理这些情况。
  • 我可能已经忘记了一些事情,因为日期和时间是很糟糕的事情,我很高兴其他更有能力的人编写了帮助程序库以供使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    相关资源
    最近更新 更多