代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

在Python中,如何将epoch后的秒数转换为“datetime”对象?

  •  195
  • Adam Matan  · 技术社区  · 14 年前

    time 模块可以使用自epoch起的秒数进行初始化:

    >>> import time
    >>> t1=time.gmtime(1284286794)
    >>> t1
    time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                     tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)
    

    有没有一种优雅的方法来初始化 datetime.datetime 以同样的方式反对?

    4 回复  |  直到 6 年前
        1
  •  447
  •   SilentGhost    14 年前

    datetime.datetime.fromtimestamp 如果你知道时区,你就可以产生和 time.gmtime

    >>> datetime.datetime.fromtimestamp(1284286794)
    datetime.datetime(2010, 9, 12, 11, 19, 54)
    

    >>> datetime.datetime.utcfromtimestamp(1284286794)
    datetime.datetime(2010, 9, 12, 10, 19, 54)
    
        2
  •  42
  •   Seganku    11 年前

    从epoch到 datetime strftime :

    >>> ts_epoch = 1362301382
    >>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
    >>> ts
    '2013-03-03 01:03:02'
    
        3
  •  31
  •   Jens Kirk Roybal    7 年前

    从docs中,从epoch开始的秒数中获取时区感知的datetime对象的推荐方法是:

    Python 3

    from datetime import datetime, timezone
    datetime.fromtimestamp(timestamp, timezone.utc)
    

    Python 2 ,使用 pytz :

    from datetime import datetime
    import pytz
    datetime.fromtimestamp(timestamp, pytz.utc)
    
        5
  •  2
  •   Error - Syntactical Remorse user8194964    4 年前

    因为其他解决方案没有 T 分隔符或时间偏移(除 迈斯特罗 (回答):

    from datetime import datetime, timezone
    result = datetime.fromtimestamp(1463288494, timezone.utc).isoformat('T', 'microseconds')
    print(result) # 2016-05-15T05:01:34.000000+00:00
    

    fromtimestamp 因为如果我用 utcfromtimestamp .astimezone(...) 无论如何要得到补偿。

    如果你不想一路 microseconds 您可以选择一个不同的单位与 isoformat() 方法。