【问题标题】:How to `strftime` having timezone adjusted?如何调整时区的`strftime`?
【发布时间】:2013-05-19 07:36:14
【问题描述】:

我像这样存储我的日期时间 int UTC:

import pytz, datetime

timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0)
timezoneLocal = pytz.timezone('Europe/Vilnius')

timeLocal = timezoneLocal.localize(timeUTC)

但是当我尝试打印它时,它只会给我正常的 UTC 时间

>>> timeLocal.strftime('%H:%M:%S')
'19:27:50'

我希望这会返回'22:27:50',因为这是当地时间(pytz.timezone('Europe/Vilnius') 目前是 +3)。我在这里错过了什么?

【问题讨论】:

    标签: python datetime python-2.7


    【解决方案1】:

    将日期字符串本地化为 UTC 日期时间,然后使用 astimezone 将其转换为本地时区。

    import pytz, datetime
    
    timeUTC = datetime.datetime(2013, 5, 23, 19, 27, 50, 0)
    timezoneLocal = pytz.timezone('Europe/Vilnius')
    utc = pytz.utc
    timeLocal = utc.localize(timeUTC).astimezone(timezoneLocal)
    print(timeLocal)
    # 2013-05-23 22:27:50+03:00
    

    localize 不会转换 日期时间,它会解释日期字符串,就好像它是在那个时区写的一样。 localize 从一个简单的日期时间(例如timeUTC)构建一个时区感知的日期时间。 astimezone 将时区感知的日期时间转换为其他时区。

    【讨论】:

    • 这就像一个魅力(虽然我不确定它是否尽可能直观......),谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 2014-11-16
    • 2015-09-26
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    相关资源
    最近更新 更多