Как правило, рекомендуется хранить время в формате UTC, как указано в здесь и здесь.
Предположим, есть повторяющееся событие, скажем, время окончания, которое всегда в одно и то же местное время, скажем 17:00, независимо от того, включено или выключено летнее время для этого часового пояса. Также существует требование не изменять время вручную, когда летнее время включается или выключается для определенного часового пояса. Также требуется, чтобы всякий раз, когда время окончания запрашивается любыми другими системами через API (например, GetEndTimeByEvent), он всегда отправляет время окончания в формате UTC.
Подход 1. Если принято решение сохранить в UTC, его можно сохранить в таблице базы данных, как показано ниже.
Event UTCEndTime
=====================
ABC 07:00:00
MNO 06:00:00
PQR 04:00:00
Для первого события ABC время окончания по всемирному координированному времени - 07:00, что при преобразовании для отображения из всемирного координированного времени в местное время 1 июля 2012 года приведет к 17:00 по местному времени, а если оно будет преобразовано 10 октября 2012 года ( дата, когда для часового пояса установлено летнее время), то результатом будет 18:00, что не является правильным временем окончания.
Один из возможных способов, который я мог подумать, - это сохранить время летнего времени в дополнительном столбце и использовать это время, когда в часовом поясе летнее время включено.
Подход 2. Однако, если оно сохранено как местное время, как показано ниже, например, для события ABC, оно всегда будет 17:00 в любой день, поскольку преобразование в из UTC по местному времени.
Event LocalEndTime
=======================
ABC 17:00:00
MNO 16:00:00
PQR 14:00:00
А уровень приложения преобразует местное время во время UTC для отправки в другие системы через (API GetEndTimeByEvent).
Можно ли в этом случае сохранить время в формате UTC? Если да, то как установить постоянное местное время?
Связанные вопросы: Is есть ли веская причина хранить время не в формате UTC?