I really like the way this was written up in DelayJob / job.rb
def self.db_time_now if Time.zone Time.zone.now elsif ActiveRecord::Base.default_timezone == :utc Time.now.utc else Time.now end end FWIW/ --Keenan On Apr 20, 2010, at 2:01 PM, Matthew A. Brown wrote: > The usual approach with ActiveRecord is to treat datetime columns as > time-zone-less -- in other words, regardless of whether postgres has > an internal idea of time zone, you interpret the values of those > columns in whatever time zone makes sense. > > To make that less of a pain, many applications set ActiveRecord to > persist all timestamps as UTC -- this is just a configuration setting > you can put into your environment.rb: > > ActiveRecord::Base.default_timezone = :utc > > Then, whenever you're doing time-based queries, you need to remember > to cast the time in question to UTC. One could make the argument that > ActiveRecord should do this for you, or that it shouldn't, but either > way it doesn't, so it's just something you have to remember to do in > your code. > > Naturally, operations that assume that your idea of a time zone and > the database's are the same -- such as performing a query with NOW() > -- are going to cause you problems; but since you're probably building > all your queries in Ruby anyway, it's easy enough to avoid those > situations. > > Mat > > On Tue, Apr 20, 2010 at 13:39, Matthew Moore <m3mo...@gmail.com> wrote: >> I have a model that I'm trying to do a find along with conditions that >> rely on Time.now. >> >> When I run 2 simple queries, one with created_at <= Time.now, and one >> without, I expect to find the exact same record (because no new posts >> have been created in between these calls). >> >> But I get different results -- >> >> Here's my output: >>>> Time.now >> => Tue Apr 20 10:38:01 -0700 2010 >>>> Time.now.utc # For verification purposes >> => Tue Apr 20 17:38:05 UTC 2010 >>>> Post.find(:first, :conditions => ['created_at <= ?', Time.now], :order => >>>> 'created_at DESC') >> => #<Post id: 7835, created_at: "2010-04-20 05:46:03", updated_at: >> "2010-04-20 05:46:03"> >>>> Post.find(:first, :order => 'created_at DESC') >> => #<Post id: 7866, created_at: "2010-04-20 17:17:26", updated_at: >> "2010-04-20 17:17:26"> >> >> >> Is this because the Timezone of the server is set wrong? Something >> funky with Postgres? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Heroku" group. >> To post to this group, send email to her...@googlegroups.com. >> To unsubscribe from this group, send email to >> heroku+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/heroku?hl=en. >> >> > > -- > You received this message because you are subscribed to the Google Groups > "Heroku" group. > To post to this group, send email to her...@googlegroups.com. > To unsubscribe from this group, send email to > heroku+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/heroku?hl=en. > -- You received this message because you are subscribed to the Google Groups "Heroku" group. To post to this group, send email to her...@googlegroups.com. To unsubscribe from this group, send email to heroku+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/heroku?hl=en.