【问题标题】:python: convert year/month/day/hour/min/second to # seconds since Jan 1 1970python:自 1970 年 1 月 1 日以来将年/月/日/时/分/秒转换为 # 秒
【发布时间】:2012-01-19 12:24:27
【问题描述】:

我知道如何在 C 和 Java 中执行此操作,但我不知道如何快速将年/月/日/小时/分钟/秒转换为自 1970 年 1 月 1 日以来的秒数。

有人可以帮我吗?

到目前为止,我已经弄清楚如何创建 datetime object,但我似乎无法获得自纪元以来经过的 # 秒。

(编辑:我的问题与另一个问题相反:Python: Seconds since epoch to relative date

【问题讨论】:

    标签: python datetime time epoch


    【解决方案1】:

    使用timetupleutctimetuple方法获取时间元组并使用time.mktime将其转换为时间戳

    >>> import datetime
    >>> dt = datetime.datetime(2011, 12, 13, 10, 23)
    >>> import time
    >>> time.mktime(dt.timetuple())
    1323793380.0
    

    有一个很好的错误与之相关http://bugs.python.org/issue2736,这是一个有趣的阅读,任何试图转换为时间戳的人都应该阅读这个。根据那个线程正确的方法是

    timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
    

    【讨论】:

    【解决方案2】:

    您可以使用datetime.datetime(1970, 1, 1) 作为参考,并从datetime.timedelta 对象中获取总秒数,如下所示:

    from datetime import datetime
    
    delta = your_date - datetime(1970, 1, 1)
    delta.total_seconds()
    

    【讨论】:

    • 它假定your_date 是UTC 日期。
    【解决方案3】:
    import calendar
    
    calendar.timegm(datetime_object.utctimetuple())
    

    【讨论】:

    • 如果datetime_object 没有附加时区信息,utctimetuple() 会静默失败,除非datetime_object 已经代表 UTC 时间。
    【解决方案4】:

    这些行可以返回一个浮点数,表示自纪元以来的秒数。

    import time
    
    time.time()
    

    【讨论】:

      【解决方案5】:

      将日期时间对象(故障停机时间:年/月/日/小时/分钟/秒)转换为seconds since the Epoch (POSIX time)

      seconds_since_epoch = datetime_object.timestamp()
      

      注意:POSIX Epoch is "00:00:00 GMT, January 1, 1970".

      如果datetime_object 没有时区信息,则.timestamp() 方法使用本地时区。

      datetime.timestamp() method 在 Python 3.3 中引入;有关适用于旧 Python 版本的代码,请参阅Converting datetime.date to UTC timestamp in Python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-07
        • 2011-08-06
        • 1970-01-01
        • 2012-02-19
        • 2012-07-06
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        相关资源
        最近更新 更多