Я уже давно борюсь с этой проблемой.Я чувствую, что хорошо понимаю часовые пояса, и думаю, что понимаю, как правильно использовать pytz, поэтому я обычно использую его, и у меня обычно не возникает никаких проблем.Возможно, я пытаюсь использовать не те инструменты, которые мне нужны.
В моем текущем приложении мне нужно работать с абстрактными time
объектами.То есть меня волнует то, что происходит в 16:00.Мне все равно, что это произойдет в 16:00 23 декабря.Кажется, что pytz предпочитает работать с datetime
объектами: и это имеет смысл.Он не может рассчитать смещение, поскольку он отличается в зависимости от дня для летнего времени и исторических причин и т. Д.
Я пытаюсь позволить пользователям координировать ежедневные события по всему миру.Если пользователь в Японии говорит, что мероприятие проводится с 21:00 до 23:00 каждый день, я хочу, чтобы пользователи в США и Центральной Америке ежедневно видели с 6:00 до 8:00.И я думал, что у меня это работает ... пока две недели назад это так.Видите ли, летнее время только что закончилось в большинстве Соединенных Штатов, так что сейчас 6: 00-8: 00 было на самом деле раньше 7: 00-9: 00.
Это ломает мою идею, что мне нужно обычно хранитьраз в UTC, то конвертируйте их только для просмотра.Часовой пояс, в котором он был создан, на самом деле очень важен.Если мы изменим это на обратное, и пользователь в часовом поясе США, который наблюдает за переходом на летнее время, устанавливает время события, то это время должно измениться в Японии, даже если они его не соблюдают!Если я сохраню это время как UTC, в Японии ничего не изменится, но это не та функциональность, которую я хочу.
Так что я хотел бы сохранить как time
объект с tzinfo
.Но вы не можете создать объект времени с точным pytz tzinfo
без даты, но дата не важна.Если я использую текущую дату, чтобы выяснить tzinfo
, тогда она фактически перестанет быть точной, как только этот часовой пояс изменится.
Я предполагаю, что мой вопрос: Какой лучший способ хранения "4PM Eastern "таким образом, который может быть найден в любой точке мира, в любое время в будущем ?Это включает в себя восточные!Я хочу, чтобы это было 4 вечера во время летнего времени, а также за пределами летнего времени.Я не могу сохранить его как UTC, потому что 12:00 UTC - это то же время, что и 12:00 UTC в течение всего года, но я этого не хочу.То, что я думаю, я хочу, это «абстрактный» или «временный» pytz.timezone
, который не имеет фактического смещения до тех пор, пока не будет указана дата (дата просмотра).Это вещь?Я прочитал бесчисленные вопросы на этом сайте, как на python, так и на pytz docs, и не могу найти ничего подобного или кого-либо с подобной проблемой.Кажется, все говорит о конкретной datetimes
или о работе только в пределах datetimes
, но это не имеет отношения к моей проблеме.
Мое приложение довольно большое, поэтому сложно выделить отдельные части, но ямогу попытаться показать, что я пробовал и почему все не работает.
event_time = datetime.time(hour=12, tzinfo=pytz.timezone("US/Eastern"))
было бы моим идеальным решением.Но использование pytz для создания tzinfo не очень хорошая идея (это даст мне смещение, например -5: 04 по историческим причинам) - есть ли способ указать версию US / Eastern для использования?
datetime.now(pytz.timezone("US/Eastern")).replace(hour=12, minute=0, second=0, microsecond=0).timetz()
дает мне то, что похоже на то, что я хочу, но оно работает правильно только до тех пор, пока США / Восток не изменится.Если я применяю это к дате, которую я перенес назад до изменения летнего времени, это дает мне 13:00, а это не то, чего я хочу.