Назад | Перейти на главную страницу

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

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

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

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

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

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

Читая о tzdata Пакет может быть вам интересен.

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

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

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

Самое простое решение (возможно, единственное) - использовать 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...

Это дает полную информацию для тех, кто в ней нуждается; но это довольно легко игнорировать для тех, кто этого не делает. Подразумеваемый часовой пояс выше - «US / Pacific» (или предпочтительное название America / Los_Angeles) и является правильным переключением часового пояса для 2009 года.

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

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

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