【问题标题】:Convert date to timestamp in Python在 Python 中将日期转换为时间戳
【发布时间】:2016-02-10 20:06:07
【问题描述】:

我有一个数据库,其中包含格式如下的日期:“2015-10-20 22:24:46”。我需要将这些日期转换为 UNIX 时间戳 (UTC),使用 Python 最简单的方法是什么?

【问题讨论】:

  • 我假设时间戳是指自纪元以来的秒数。如果你想要一个日期时间对象......哦,有人刚刚给出了一个答案,说明了如何做到这一点。
  • 输入时区是什么?是当地时间吗?您想如何处理模糊时间(例如,在 DST 转换期间)?时间戳是否有序?您的输入时区在过去/未来可能有不同的 UTC 偏移量吗? mktime() 是否可以访问您系统上的历史时区数据库(以获取日期的正确 utc 偏移量)?一般来说,可移植的解决方案应该使用pytz(tz 数据库)、tzlocal(用于本地时区)模块。

标签: python date timestamp


【解决方案1】:
import time
timestamp = time.mktime(time.strptime('2015-10-20 22:24:46', '%Y-%m-%d %H:%M:%S'))

有关包含所有 % 符号的格式字符串的更多信息,请参阅python's time library

【讨论】:

    【解决方案2】:
    from datetime import datetime
    import time
    
    dt = datetime.strptime('2015-10-20 22:24:46', '%Y-%m-%d %H:%M:%S')
    ts = time.mktime(dt.timetuple())
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
    【解决方案3】:

    不使用任何第三方库:

    最直接的方法是从给定的date 对象创建一个datetime 对象,然后从中获取时间戳。

    from datetime import date, datetime
    dt = datetime(
            year=d.year,
            month=d.month,
            day=d.day
         )
    timestamp = int(dt.timestamp())
    

    【讨论】:

    • 虽然我不喜欢这种冗长,但这是唯一将 Python 日期正确转换为时间戳的答案。
    • 我们如何捕获它的 * 1000 版本
    【解决方案4】:

    datetime.datetime.timestamp() 已在 python 3.3 中添加。它返回一个浮点数(小数为毫秒),因此您必须自己将其转换为整数。

    使用示例:

    from datetime import datetime
    
    
    def ymdhms_to_timestamp(value: str) -> int:
        dt = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
        return int(dt.timestamp())
    
    
    t = ymdhms_to_timestamp("2015-10-20 22:24:46")
    # 1445372686
    datetime.fromtimestamp(t)
    # datetime.datetime(2015, 10, 20, 22, 24, 46)
    

    另请注意,由于格式化的日期字符串不包含时区信息,如果执行代码的系统的时区不是 UTC,则生成的时间戳将不是 UTC。 (更一般地说,如果存储的日期与您的系统不在同一时区,则结果将不正确。)

    但如果存储的格式化日期最初是 UTC,您可以在将其转换为时间戳之前将“原始日期时间”纠正为“时区感知日期时间”。

    例子:

    from datetime import datetime, timezone
    
    
    def ymdhms_to_timestamp_utc(value: str) -> int:
        naive_dt = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
        utc_dt = naive_dt.replace(tzinfo=timezone.utc)
        return int(utc_dt.timestamp())
    
    
    t = ymdhms_to_timestamp_utc("2015-10-20 22:24:46")
    # 1445379886
    datetime.fromtimestamp(t)
    # datetime.datetime(2015, 10, 21, 0, 24, 46)
    

    【讨论】:

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