Bug regarding ActiveRecord and TimeWithZone

I’ve discovered a strange behavior regarding ActiveRecord and
TimeWithZone

I’ve seen the error when using SQL Server, I have not yet tried with any
other database.

Here’s output from the console - “User” is a simple model made with a
migration.


d1 = User.find(:first).created_at
=> Thu, 21 Jun 2001 19:11:57 CEST +02:00

d2 = Time.zone.now
=> Fri, 23 Jan 2009 12:02:00 CET +01:00

d1.class
=> ActiveSupport::TimeWithZone

d2.class
=> ActiveSupport::TimeWithZone

d2 - d1
=> Thu Aug 04 17:50:03 UTC 1977

d1 - d2
TypeError: expected numeric or date
from /usr/lib/ruby/1.8/date.rb:1252:in minus_without_duration' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/date/calculations.rb:88:in-’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/time_with_zone.rb:201:in
`-’
from (irb):11


The strange thing is, that “d1” (the ActiveRecord attribute) reports
itself as a TimeWithZone class, but it isn’t. If I do this instead

d1 = Time.zone.now
d2 = Time.zone.now
d1 - d2

I get no errors.

So what exactly is happening in ActiveRecord? Is it a problem in the
adapter?

  • Carsten

I will allow myself to bump this question just once, since I think it is
important - it really seems like a bug, but I would like to know, if
anyone else has experienced this before submitting to the bug list.

  • Carsten

Carsten G. wrote:

I’ve discovered a strange behavior regarding ActiveRecord and
TimeWithZone


d1 = User.find(:first).created_at
=> Thu, 21 Jun 2001 19:11:57 CEST +02:00

d2 = Time.zone.now
=> Fri, 23 Jan 2009 12:02:00 CET +01:00

d1.class
=> ActiveSupport::TimeWithZone

d2.class
=> ActiveSupport::TimeWithZone

d2 - d1
=> Thu Aug 04 17:50:03 UTC 1977

d1 - d2
TypeError: expected numeric or date
from /usr/lib/ruby/1.8/date.rb:1252:in minus_without_duration' from /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/core_ext/date/calculations.rb:88:in-’
from
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/time_with_zone.rb:201:in
`-’
from (irb):11


On Mon, Jan 26, 2009 at 9:53 AM, Carsten G. <
[email protected]> wrote:

=> Thu Aug 04 17:50:03 UTC 1977
`-’
from (irb):11


Posted via http://www.ruby-forum.com/.

Carsten

I don’t get that error using Edge Rails

d1 = u.created_at
=> Sat, 03 Jan 2009 06:06:44 UTC +00:00
d2 = Time.zone.now
=> Mon, 26 Jan 2009 08:14:33 UTC +00:00
d1.class
=> ActiveSupport::TimeWithZone
d2.class
=> ActiveSupport::TimeWithZone
d2 - d1
=> 1994869.32909489
d1 - d2
=> -1994869.32909489


Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

“I have never let my schooling interfere with my education” - Mark Twain

Andrew T. wrote:

I don’t get that error using Edge Rails

Whoops - should have tried that first… Sorry :slight_smile: And thanks.

  • Carsten