Как определить смещение по Гринвичу с поправкой на летнее время? (Встроенная система, без операционной системы, но с HTTP.)

Ух ты! Тонны сообщений о преобразовании GMT в местное время, включая поправку на летнее время. Но, похоже, мне нужно другое.

Как следует из названия, у меня есть автономная встроенная система без операционной системы. Я использую NTP для получения UTC. Это используется для маркировки событий с точной датой/временем. Я могу исправить UTC для текущего часового пояса, но не могу автоматически настроить летнее время.

Поскольку операционной системы нет, у меня нет данных Windows/Linux, таких как часовой пояс. Таким образом, нет возможности локально настроить смещение по Гринвичу.

Кажется, единственный способ сделать это для меня - использовать http-вызов, чтобы найти смещение, и единственный способ, которым я могу это сделать, - это использовать lon/lat или адрес. Я мог бы добавить долготу/широту или адрес в конфигурацию, так что это кажется единственным вариантом.

Я видел ссылки на сайты, которые возвращают смещение по Гринвичу в зависимости от местоположения. Эти сайты также автоматически настраиваются на переход на летнее время? Для этого им придется использовать одно из решений, опубликованных во многих местах на этом форуме, но это должно быть достаточно просто.

Спасибо за совет и помощь!

Дэйв


person Dave    schedule 04.04.2018    source источник


Ответы (1)


Если вам нужно только преобразовать конкретную одиночную временную метку в местное время, то да, вы можете использовать такие службы, как перечисленные здесь . По крайней мере, те, которые предлагают Microsoft и Google, преобразуют метку времени в местное время в заданном часовом поясе в дополнение к предоставлению идентификатора часового пояса IANA.

Кроме того, вы обнаружите, что функция gettimezonebycoordinates в Microsoft Azure LBS Time Zone API возвращает значение PosixTz, например "PST+8PDT,M3.2.0,M11.1.0". Это идеально для встроенных систем, так как вы можете установить переменную среды TZ в это значение, и тогда многие локальные API (например, с C и другими) будут использовать это значение в своих преобразованиях. Этот подход работает лучше всего, когда вы можете преобразовывать множество различных значений местного времени и не хотите делать http-вызов для каждого из них.

Однако имейте в виду, что использование строки часового пояса POSIX имеет некоторые ограничения, такие как ограничение одним набором правил перехода на летнее время. Как правило, они хорошо работают для временных диапазонов, близких к текущему, но не для исторических целей.

person Matt Johnson-Pint    schedule 09.04.2018
comment
Привет, Мэтт, спасибо за предложения. Я просмотрел службы часовых поясов, которые вы перечислили, и похоже, что они должны работать. Мне просто нужно поработать над отправкой/получением http-кода на встроенной стороне, чтобы быть уверенным. - person Dave; 11.04.2018