Зимнее и летнее время переключаются без перерыва на временной шкале

Кто-нибудь знает, есть ли возможность перейти с летнего на зимнее время без перерыва в графике времени? У меня есть приложение, которое регистрирует транзакции с отметкой времени. Проблема в том, что у меня не должно быть перекрывающихся временных меток. Если я просто переключаю часы с 3 до 2, у меня перекрытие. Означает, что я могу иметь два раза время 2:30, например.

Но если бы в 14:00 время начинало идти в два раза медленнее, у меня было бы правильное время в 15:00 без перерыва и без прерывания по времени.

Так кто-нибудь знает, есть ли протокол, который поддерживает это? NTP, похоже, не делает этого. И нет никакой возможности изменить приложение, в прошлый раз мы просто остановили его на час, но должно быть что-то лучше.

3 ответа

Я бы все записывал в UTC ( Всемирное координированное время), таким образом, летнее время никогда не наблюдается. Это общая настройка времени по умолчанию для серверов Linux.

Затем вы можете представить как UTC, так и местное время часового пояса на прикладном уровне.

Чтение о пакете tzdata может вас заинтересовать.

Из этой статьи в Википедии:

UTC не меняется со сменой сезонов, но местное или гражданское время может меняться, если юрисдикция часового пояса соблюдает переход на летнее или летнее время. Например, UTC на 5 часов опережает местное время на восточном побережье Соединенных Штатов зимой, но на 4 часа вперед летом.

Нет, это невозможно сделать. Местное время просто перекрывается, с этим ничего не поделаешь. Конечно, вы могли бы использовать какое-то скользящее переключение во время изменений DST, но это еще больше усложнит ситуацию (например, временные метки во время переключения будут довольно странными).

Самое простое решение (возможно, единственное решение) - использовать UTC для регистрации временных меток. Вы всегда можете конвертировать время в любое местное время, которое вам нравится при их отображении.

Я согласен с Кайлом Брандтом, что вход в UTC лучше всего. Если это неприемлемо (и ни в одном из них не происходит событий, происходящих с интервалом в один час, записанных с "тем же временем"), то сообщите в журнал смещение часового пояса (а также или вместо имени часового пояса), чтобы ты видишь:

2009-11-01 01:59:59 -07:00 ...event 1...
2009-11-01 01:00:00 -08:00 ...event 2...one second after event 1...

Это дает полную информацию для тех, кто в ней нуждается; но это довольно легко игнорировать для тех, кто этого не делает. Предполагаемый часовой пояс выше - "США / Тихий океан" (или предпочтительное название "Америка / Лос-Анджелес") и является правильным переключением часового пояса для 2009 года.

Показанный формат даты является второстепенным вариантом в стандартном обозначении ISO 8601:2004. Существуют разные "стандартные" обозначения:

2009-11-01T01:59:59-07:00
20091101T015959-0700

Последний не читается людьми (но компактен и легко читается программами). Преимущество первого состоит в том, что вся строка времени - это "одно слово", а не 3 слова в нотации, которую я использовал.

Другие вопросы по тегам