У меня есть представление редактирования для модели Event
с полями name
, start_time
и end_time
. На мой взгляд, форма выглядит примерно так:
# ...
# form with:
# - event name
# - datetime_select for event start_time (in business's local time zone)
# - datetime_select for event end_time (in business's local time zone)
Теперь вот проблема: к start_time
и end_time
прикреплен часовой пояс, но это время теряется, когда мы визуализируем представление, потому что datetime_select не включает в себя поле для часового пояса. В результате у нас есть «время UTC», которое фактически является местным временем без его часового пояса.
Напомним, что ситуация выглядит следующим образом, когда мы визуализируем форму в представлении, а затем сразу отправляем ее без внесения каких-либо изменений:
db time: 2011-05-15 @ 1100 UTC
converted to local time: 2011-05-15 @ 0600 CDT
time stored in view: 2011-05-15 @ 0600 UTC (time zone info lost)
time posted back to db: 2011-05-15 @ 0600 UTC
Обратите внимание, что время, которое было сохранено, было 1100 UTC первоначально, но сейчас 0600 UTC, хотя мы не внесли никаких изменений. Это серьезная ошибка.
Есть несколько подходов, которые мы могли бы использовать здесь. Какой самый умный способ избежать потери часовых поясов при публикации в представлении? (Обратите внимание, что модель может обновляться иными способами, чем публикация формы, например, через API.)