Я отправил вопрос ранее сегодня, когда я до сих пор не сосредоточился на этой проблеме. Я смогу быть более кратким здесь.
Я использую RoR 2.1.2 в Windows с MySQL. Часовой пояс сервера SQL - UTC. Мой местный часовой пояс Тихоокеанский (-0800)
У меня есть модель со столбцом типа timestamp, с помощью которого я могу делать такие вещи:
record = Record.find(:first)
record.the_time = Time.now()
Когда я делаю «выбор * из записей» в базе данных, показанное время на восемь часов опережает мое местное время, что является правильным, учитывая, что база данных находится в UTC. (Я проверил, что это «мышление в utc» с простыми «select now ()» и «select utc_timestamp ()»)
Вот тут и начинается беда. Если я отображаю время в представлении:
<%= h record.the_time %>
... тогда я получаю правильное время, отображаемое в формате UTC. Если я написал в базу данных в 16:40:00 по местному времени, база данных показала 00: 40: 00.
ОДНАКО, если я запускаю автономный скрипт:
record = Record.find(:first)
puts record.the_time
... затем я возвращаю время UTC, которое я сохранил в базе данных (00:40:00,), но с местным часовым поясом:
Wed Nov 26 00:40:00 (-0800) 2008
... восьмичасовая деформация времени. Почему сохранение времени правильно переводит, а восстановление - нет? Если я сравниваю сохраненное время из недавнего прошлого в БД и сравниваю его с текущим временем, текущее время становится меньше - говорит мне, что это не просто проблема преобразования строк.
Есть идеи?