У меня есть приложение rails, и я храню все время в UTC в базе данных для целей различий в TimeZone. Кроме того, я удаляю запись вместо того, чтобы удалить ее, установив в таблице поле «ffective_end_date »на текущее время. Затем я использую именованную область видимости в модели следующим образом:
named_scope :valid, :conditions => ['(effective_end_date IS NULL OR effective_end_date > ?)
AND (effective_start_date IS NULL OR effective_start_date < ?) ',Time.zone.now.gmtime, Time.zone.now.gmtime]
Похоже, что это нормально работает на моем компьютере Mac, но как только я перехожу на работу, кажется, что существует несоответствие между системным временем и временем, которое я не знаю почему !! Ввод команды «date» в Linux, кажется, дает правильное время. Глядя на файл журнала производства ниже:
sms parser(inparser) daemon is still running at Wed Jun 03 22:38:36 -0700 2009.
[4;35;1mUltrasmsin Load (0.5ms)ESC[0m ESC[0mSELECT * FROM `smsin` WHERE ((effective_end_date IS NULL OR effective_end_date > '2009-06-04 05:28:32')
AND (effective_start_date IS NULL OR effective_start_date < '2009-06-04 05:28:32') )
Это сгенерированный запрос из следующих строк кода:
ActiveRecord::Base.logger.info "sms parser(inparser) daemon is still running at #{Time.now}.\n"
nonConvertedMsgs = Ultrasmsin.valid.find(:all)
Время первой команды, отображаемое из «Time.now», является правильным, но второе время (полученное из названной области видимости), похоже, неверно !! (выключено на 10 минут)
Это действительно озадачивает меня, так как я думаю, что Time.zone.now.gmtime просто конвертирует часы и не затрагивает минуты, но кажется, что часы конвертируются нормально в GM Time, но минуты отключены на 10 минут!
Есть идеи?