开发者

Ruby on Rails, delayed_job serializing incorrect datetime as GMT

I have some code that seems to execute improperly when it is serialized and run with delayed_job. To get the necessaries out of the way, I am running Ubuntu 11.04, Ruby 1.8.7 with Rails 3.0.4.

I have a datetime field in one of my tables that obviously stores the date and time of a particular event. In my RoR application, I use this field through the application calling strftime on it to format it in different ways. The output of this formatting is correct on the web page.

I am also using delayed_job to put this same field into an email that is sent out (triggered via some action). When the email arrives, it appears that it has somehow been formatted as GMT. For example, if the date time was supposed to be 11-12-2011 15:30:00 (3:30 PM) in the database, the email would read 11-12-2011 22:30:00 (10:30 PM).

I looked in the database and found somethings that are interesting:

  • The datetime in the database is 2011-11-12 22:30:00
  • The app, when displayed via the web, formats the data properly as 11-12-2011, 3:30 PM
  • The email, formats the data properly as 11-12-2011, 10:30 PM
  • When I run a small ruby file that simply prints the date and time

    p Time.now

I get this the correct output (local, non GMT time)

Mon Aug 15 10:15:27 -0600 2011

When I look at what is in the serialized yaml for the delayed_jobs table, I can see that the date field is formatted as

2011-11-12 22:30:00 Z

In my application.rb, I have

config.开发者_如何学编程time_zone = 'Mountain Time (US & Canada)'

and in my environment.rb, I have

timezone = "Mountain Time (US & Canada)"

Can any one help me figure out what is going on here? I am relatively new to RoR, so this may be a super obvious, easy question. If you need any more debug information, please let me know and I can post it up. Similarly, if my question is unclear, I can try to clar


In my case, I solved explicitly specifying the method in_time_zone in the view example: @my_obj.created_at.in_time_zone.

I know it is not elegant, but so far I have not found better solutions.


Try changing the date object to a string before serializing.


You may want to set the timezone in the database. If it's MySQL, see: http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜