【问题标题】:Python2 datetime - Convert epoch time to UTC timestamp with offsetPython2 datetime - 将纪元时间转换为带偏移量的 UTC 时间戳
【发布时间】:2017-04-17 22:13:32
【问题描述】:

由于我无法控制的原因,我正在使用 Python 2,因此无法升级到 Python 3(它对时区有更好的支持)。

我有一个像1492464960.53 这样的纪元时间,我想把它转换成像这样2017-04-17T21:36:00.530000+00:00 这样的时间戳。

我尝试使用以下代码,但这并没有给出我也需要的时间戳的 +00:00 部分。

import datetime
created=1492464960.53
time_str = datetime.datetime.utcfromtimestamp(created).isoformat()
print(time_str)
>> 2017-04-17T21:36:00.530000

如何添加+00:00 部分?

【问题讨论】:

    标签: python datetime python-2.x utc


    【解决方案1】:

    刚刚尝试过,它对我有用。

    首先解释为什么原始解决方案不起作用,据我了解,isoformat() 不适用于上述 epoch 值的原因是因为此方法要求对象返回具有 'utcoffset' 属性的东西,但是在上面当我使用此属性对其进行测试时,浮点/纪元值返回“无”。 如果我们不处理转换浮点数,isoformat 方法可能会很好地工作。

    无论如何,解决方案:

    from datetime import datetime, tzinfo
    import pytz
    created = 1492464960.53
    dt = datetime.utcfromtimestamp(created)
    
    ##print results for above 'dt' variable
    
    2017-04-17 21:36:00.530000
    
    dt = dt.replace(tzinfo=pytz.utc)
    
    ##print results for above 'dt' variable
    
    2017-04-17 21:36:00.530000+00:00
    
    dt.isoformat()
    
    ##print results for above 'dt' variable
    
    '2017-04-17T21:36:00.530000+00:00'
    

    【讨论】:

    • 谢谢!有什么方法可以在不使用 pytz 的情况下获得相同的结果?我真的没有在我的服务器上安装它的选项。
    【解决方案2】:

    抱歉,我不确定您安装 pytz 的确切含义,我只是 pip installed pytz 然后在我的本地机器上的 python shell 中添加了 import 语句。

    不确定这是最好的解决方案,但它似乎已经奏效,所以这是我可以提供的替代方案:

    created = 1492464960.53
    dt = dt.utcnow().fromtimestamp(created, dt.tzname()).isoformat()
    

    应该打印

    '2017-04-17T14:36:00.530000'

    from datetime import time
    t = time(00, 00, 00, tzinfo=dt.tzname())
    tmstmp = dt.isoformat()+'+'+t.strftime("%M:%S %z")
    

    应该打印

    2017-04-17T21:36:00.530000+00:00

    【讨论】:

    • 请编辑您的answer,而不是发布另一个。
    • 我很抱歉 Gerry,认为这是我在 Stackoverflow 上回答的第一个或第二个问题。以后一定会编辑的:)
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2016-04-29
    • 2016-10-23
    • 1970-01-01
    • 2012-08-30
    相关资源
    最近更新 更多