2013-05-21 2 views
1

Что-то, над чем я сейчас работаю, требует локализованного времени для пользователей по всему миру. Все данные хранятся в формате UTC, поэтому их преобразование достаточно просто, и у нас есть известная, безопасная точка отсчета и т. Д.Выражение смещения часового пояса - разъяснение оценено

Однако, что-то о том, как выражено смещение, заставляет меня почесать голову ,

>>> timezone.now() # get the UTC-stamped server time as an example 
datetime.datetime(2013, 5, 21, 16, 37, 54, 62598, tzinfo=<UTC>) 

>>> eastern = pytz.timezone('US/Eastern') # localise this to US/Eastern 
>>> utc_dt.astimezone(eastern) 
datetime.datetime(2013, 5, 21, 12, 37, 54, 62598, 
    tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 

(Это мой разрыв строки в выводе даты и времени, только чтобы сделать его легче обнаружить бит я на о.)

Это выражение смещения кажется, хорошо, немного над Вверх. Вместо того, чтобы просто сказать, что это смещение -4h от UTC, похоже, что это минус один день плюс 20:00 часов. Это правильно?

+0

я не уверен, почему текст формируется таким образом, но это просто отладочный вывод, правильно? Действительно ли это имеет значение, то как оно отформатировано? Вероятно, вы будете использовать 'strftime' или подобное при использовании в вашем приложении. –

+0

Кроме того, вы должны знать, что 'US/*' часовые пояса являются псевдонимами и существуют для обратной совместимости. Вероятно, вы должны использовать 'America/New_York'. См. [Здесь] (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) для списка. –

+0

Спасибо, да, Америка/Нью-Йорк, Чикаго и т. Д., Что мы действительно будем использовать, но я просто использовал US/Eastern в качестве примера. –

ответ

2

Вы видите repr класса часового пояса pytz, который включает в себя детали реализации, которые не имеют значения, когда вы используете его в реальной жизни. Если вас print тот же объект, вы увидите что-то другое:

>>> print utc_dt.astimezone(eastern) 
2013-05-21 15:00:27.648000-04:00 
+0

Спасибо. Делает совершенный смысл. Любая идея, однако, почему она реализована именно так? Любопытно. –

+0

@stevejalim, извините, у меня нет никакого представления о внутренней работе pytz. –