У меня есть приложение на python, которое отправляет напоминания по электронной почте пользователям в разных часовых поясах. Время начала устанавливается на определенную дату и время, а напоминание может быть установлено на некоторое количество минут до времени начала.
Предыдущий разработчик не учел часовой пояс пользователя, поэтому напоминания всегда отправлялись на основе времени сервера.
Используя документацию pytz , я сначала попытался использовать UTC для всего, и хотя это работало в процессе разработки, напоминания все еще были отключены. Сначала я предположил, что это проблема с NTP на сервере, но это не так.
Я хотел подтвердить, что разработка и производство действительно ведут себя по-разному, поэтому я создал простой скрипт для тестирования между ними:
server_time = datetime.datetime.utcnow()
print "Server Time:", server_time
user_timezone = pytz.timezone('America/Montevideo')
print "User Timezone:", user_timezone
user_offset = user_timezone.utcoffset(server_time)
print "Offset:", user_offset
user_datetime = server_time + user_offset
print "User Time:", user_datetime
Результат в разработке (правильный):
Server Time: 2011-09-07 16:53:00.711334
User Timezone: America/Montevideo
Offset: -1 day, 21:00:00
User Time: 2011-09-07 13:53:00.71133
Результат производства (неверный):
Server Time: 2011-09-07 16:53:01.767143
User Timezone: America/Montevideo
Offset: -1 day, 20:15:00
User Time: 2011-09-07 13:08:01.767143
Так что похоже, что Pytz просто дает неправильное смещение. Обратите внимание, что не имеет значения, использую ли я другой часовой пояс; каждый, который я пробовал, дает неправильное смещение.
Что касается различий в средах, то оба являются блоками Ubuntu, но производство работает под управлением Python 2.5.2, а разработка - 2.6.2.
Существует не очень много ошибок, сообщенных для pytz , и я не нашел причины для различных смещений ни в одном из моих поисков.
Так это проблема с pytz-данными на моем рабочем сервере? Ошибка Pytz? Или проблема с моим пониманием pytz? Чего мне не хватает?