Я столкнулся с этой проблемой при тестировании приложения rails, развернутого на двух разных промежуточных серверах в разных часовых поясах (PDT и CDT). Оба сервера имеют рельсы, использующие UTC config.time_zone по умолчанию. Помимо того, что конфигурация часового пояса отличается, часы на обоих серверах установлены правильно.
Ниже то, что я вижу в консоли рельсов:
На сервере, где системный часовой пояс CDT,
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 05:00:00 UTC +00:00
На сервере, где системный часовой пояс PDT,
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 07:00:00 UTC +00:00
Строка Mon May 28 2012 00:00:00 GMT-0700 (PDT)
представляет собой произвольное значение даты и времени, отправленное клиентом. Это распространенный сценарий при использовании объекта Date javascript, поступающего через коллекцию параметров rails.
Почему два результата Time.zone.parse(identical_date_time_string)
отличаются?
Если я запускаю следующее в обеих системах, результат будет правильным:
"Mon May 28 2012 00:00:00 GMT-0700 (PDT)".to_time
=> 2012-05-28 07:00:00 UTC
Я запускаю рельсы 3.2.3 с рубином 1.9.3-p125 на Ubuntu.