Где Rails хранит даты начала и окончания летнего периода? - PullRequest
0 голосов
/ 18 октября 2018

Я использую Rails 5, и часовой пояс моего приложения установлен на Бразилию.

Сейчас в Бразилии зима (без перехода на летнее время), поэтому

Time.current.dst? возвращает false

Но в Бразилии летнее время начинается 21/10/2018, поэтому, когда я делаю

(Time.current + 10.days).dst?, я ожидаю, что он вернется true, но вернется false.

Есть ли таблица, в которой я могу проверить, какие даты Rails считает для начала и для окончания летнего времени в каждом часовом поясе?

Или в качестве другого примера.Я понимаю, что UTC не имеет летнего времени.Так что

Time.current.strftime(%Z) return -3, что является правильной разницей между UTC и текущим бразильским временем.

Но когда я делаю

(Time.current+10.days).strftime(%Z), все равно возвращается -3 но эта дата после Бразилии изменила время, поэтому она должна быть -2.Кажется, что-то не так.

1 Ответ

0 голосов
/ 18 октября 2018

Per документация Rails :

Класс TimeZone служит оболочкой для TZInfo::Timezone экземпляров.

TZInfo::Timezone экземпляровпредоставляется через Ruby TZInfo gem.Данные для TZInfo предоставляются в отдельном пакете TZInfo-Data .Следите за обновлениями, чтобы ваши данные о часовых поясах были точными.Эти данные получены из базы данных часовых поясов IANA (TZDB) , как и для большинства других языков программирования.

Обратите внимание, что обычно предпочтительнее использовать идентификаторы часовых поясов IANA с tzinfoСамо по себе, поскольку часовые пояса Rails ограничены «значимым подмножеством из 134 зон» (на один и тот же документ), но содержат много дубликатов и пропусков и не дают никаких критериев относительно того, что означает «значимый».Подробнее об этом можно узнать в теге часового пояса wiki (ближе к концу).

Кроме того, Бразилия запускает летнее время 4 ноября 2018 года, а не 21 октября.Смотрите здесь и здесь .Это изменение было отражено в IANA TZDB 2018a , что было отражено в TZInfo-Data v1.2018.1 .Если у вас есть эта версия или более новая, то у вас есть более новая, правильная дата перехода на летнее время в Бразилии и, таким образом, объясняются ваши результаты.

Недавно был план перенести дату перехода на летнее время в Бразилии еще дальше до 18 ноября, ноправительство отозвало этот план еще до того, как оно стало официальным, и поэтому никогда не было представлено в данных о часовых поясах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...