【问题标题】:unable to display time in different timezone无法在不同时区显示时间
【发布时间】:2018-01-09 15:22:16
【问题描述】:

当我在有意识的datetime 实例上更改tzinfo 时,我一直得到相同的strftime 结果:

>>> from datetime import datetime
>>> import pytz
>>> fmt = '%d.%m.%Y %H:%M'
>>> now_naive = datetime.utcnow()
>>> now_naive.strftime(fmt)
'02.08.2017 11:53'

>>> now_aware = now_naive.replace(tzinfo=pytz.timezone('UTC'))
>>> now_aware_minus_3 = now_aware.replace(tzinfo=pytz.timezone('Etc/GMT-3'))
>>> now_aware.strftime(fmt)
'02.08.2017 11:53'

>>> now_aware_minus_3.strftime(fmt)
'02.08.2017 11:53'

这是为什么呢?如何在不同时区显示当前时间?

【问题讨论】:

标签: python datetime pytz


【解决方案1】:

这样试试吧:

from datetime import datetime
from pytz import timezone

x=datetime.now(timezone('Europe/Madrid'))
print x
x=datetime.now(timezone('UTC'))
print x
x=datetime.now(timezone('Etc/GMT-3'))
print x

【讨论】:

    【解决方案2】:

    使用.replace(tzinfo=...)只替换datetime对象中的时区,不进行实际的时区转换。

    试试这个:

    time_unaware = datetime.utcnow()
    time_utc = pytz.timezone('UTC').localize(time_unaware)  # same as .replace(tzinfo=...)
    time_gmt_minus_3 = time_utc.astimezone(pytz.timezone('Etc/GMT-3'))  # performs timezone conversion
    

    time_gmt_minus_3 上使用.strftime() 现在应该会显示您的预期。

    另外,@sophros 已经链接了here

    为了符合 POSIX 风格,以“Etc/GMT”开头的区域的符号与大多数人的预期相反。在这种样式中,GMT 以西的区域为正号,以东的区域为负号。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多