Я работаю над приложением Rails, которое похоже на блог. Пользователи создают записи. Я пытаюсь понять, как обрабатывать время хранения и отображения. Я прочитал эту запись о поддержке часовых поясов в Rails.
Это здорово, но не охватывает то, что нужно делать моему приложению. Он только смотрит на случаи, когда вы хотите преобразовать сохраненное время в текущий зарегистрированный часовой пояс пользователя. Напротив, эффект, который я хочу, это ...
Пользователь создает запись в Калифорнии в 10:00 утра.
Пару лет спустя он переезжает в Нью-Йорк, а затем в какой-то момент смотрит на свою старую запись. Дата «создания» должна указывать «10:00 утра». Ему нет дела до часовых поясов. Он просто хочет знать, в какое время дня он чувствовал себя, когда писал эту запись.
Если он затем редактирует Заявку в Нью-Йорке, отображаемая «измененная» дата, опять же, является его субъективным временем суток, когда он произвел редактирование. (Давайте предположим, что он перешел в «настройки» и изменил настройку часового пояса при переезде.)
Кроме того, ради тщательности приложение должно иметь возможность сообщать «реальное» абсолютное время при создании или обновлении записи.
(Примечание: мой воображаемый пользователь - парень, но для женщин он должен работать примерно так же.)
Я думаю о том, как реализовать это ...
Имеют атрибуты User#time_zone
, Entry#created_at_utc
и Entry#updated_at_utc
в дополнение к стандартным created_at
и updated_at
.
Пользователь выбирает свой часовой пояс из меню при регистрации. (Они могут изменить его позже, если захотят.)
Приложение использует User#time_zone
для хранения created_at
и updated_at
в субъективном местном времени пользователя. Если для них 10:00 утра, приложение пишет «10:00 утра». в БД.
Приложение также сохраняет текущее время UTC в вышеупомянутых полях _utc
, чтобы справиться с последним вышеуказанным требованием.
Это хороший способ сделать это? Есть ли лучший способ?