无法在不同的时区
问题描述:
来显示时间。当我在一个知道datetime
比如我继续得到同样的结果strftime
改变tzinfo
:无法在不同的时区
>>> 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'
这是为什么?如何显示不同时区的当前时间?
答
试试这样:
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
答
使用.replace(tzinfo=...)
只替换时区的日期时间对象,不执行实际的时区转换。
试试这个:
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”开始的区域具有从大多数人希望他们的标志反转。在这种风格下,格林威治标准时间以西的区域有一个正号,东侧有一个负号。
这不是一个[重复](https://*.com/questions/4008960/pytz-and-etc-gmt-5)? – sophros
这可能有所帮助。 - https://*.com/a/18646797/5585424 –
[如何\'strftime \'有时区调整?](https://*.com/questions/16722464/how-to-strftime-具有-时区调整) – jimf