2015-04-03 4 views
0
import datetime 
import pytz # install from pip 

US_PACIFIC_TIMEZONE = pytz.timezone("US/Pacific") 

dt = datetime.datetime.utcnow().replace(tzinfo=US_PACIFIC_TIMEZONE) 
print(dt == dt.replace(tzinfo=US_PACIFIC_TIMEZONE)) # True 

dt = datetime.datetime.now(tz=US_PACIFIC_TIMEZONE) 
print(dt == dt.replace(tzinfo=US_PACIFIC_TIMEZONE)) # False 

Так выглядит datetime.datetime.now(tz=..) не установлен в часовом поясе указываю ...озадачивает часовой пояс Поведение

Похоже, часовой пояс устанавливается при использовании datetime.now, но он выключен по часовой зоне.

Почему это?

+0

Используйте 'localize', а не' replace'. Прочитайте [pytz docs] (http://pythonhosted.org/pytz). –

+0

@MattJohnson: '.now (tz)' работает как есть. Вы не должны использовать 'tz.localize (.now())' здесь, даже если локальный часовой пояс - 'US/Pacific'' (последний не работает во время переходов в конце DST, а первый работает без проблем даже для неоднозначные местные времена). – jfs

+0

@ J.F.Sebastian - Да, согласился на случай «сейчас». Я говорил вообще. Благодарю. –

ответ

2

Единственная правильная формула в вашем вопросе:

dt = datetime.now(US_PACIFIC_TIMEZONE) 

US_PACIFIC_TIMEZONE может иметь различные смещения Utc в разное время, например, из-за переход на летнее время переходов. Вы не должны использовать метод .replace() (или параметр конструктора tzinfo) с такими временными часами pytz. Вот explanation on why you should not use replace() with pytz timezones that have a variable utc offset.

Смежные вопросы