Rails 2.3.5 разбирает дату непоследовательно - PullRequest
0 голосов
/ 09 апреля 2011

Для начала я использую старую версию rails из-за Redmine.

Я пытаюсь написать скрипт для обновления временных меток дампа базы данных Redmine 'до определенного часового пояса, поэтому мне нужен ruby ​​для их анализа и изменения часового пояса, предполагая, что рельсы могут обрабатывать границы dst.

Тем не менее, я нашел несоответствие (или неправильно понял), как работает Time.parse.

Вот скрипт, который я выполнил в моем приложении Rails 2.3.5 raw:

impulse@ImpulseServer:~/pgtz_converter$ script/console
Loading development environment (Rails 2.3.5)
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0200 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-20 00:00:00')
=> Sun Feb 20 00:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> Time.parse('2011-02-19 23:00:00')
=> Sat Feb 19 23:00:00 -0300 2011
>> Time.zone
=> #<ActiveSupport::TimeZone:0x7fa94a57b9a8 @tzinfo=nil, @name="UTC", @utc_offset=0>
>> exit

Вот что происходит выше:

Локальная дата-зона сервера - BRT.

impulse@ImpulseServer:~/pgtz_converter$ date
Fri Apr  8 19:17:34 BRT 2011

Сначала я проверяю Time.zone (который является UTC), затем пытаюсь проанализировать дату DST. Вывод в порядке, DST включен (я предполагаю, что Time.zone = UTC означает, что Ruby проверил конфигурацию зоны сервера и использовал ее). Затем я пробую другую дату, когда DST больше не был активен (DST закончился 20.02.2011 00:00 здесь). Эта дата правильно проанализирована (GMT-3).

Теперь проблема начинается.

Я пытаюсь снова проанализировать старую дату летнего времени, и результат неправильный! Это не было прочитано как дата летнего времени!

Я подумал, что, возможно, синтаксический анализ изменил Time.zone, но по мере вставки он все время находится в UTC.

Что вызывает это?

Спасибо за чтение.

Нило

1 Ответ

0 голосов
/ 09 апреля 2011

Возможно, вы захотите изменить использование класса ActiveSupport :: TimeWithZone в рельсах.

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