Forum: Ruby on Rails Bug regarding ActiveRecord and TimeWithZone

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Carsten G. (Guest)
on 2009-01-23 14:22
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
Carsten G. (Guest)
on 2009-01-26 09:53
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
> -----------------------------------------
Andrew T. (Guest)
on 2009-01-26 10:16
(Received via mailing list)
On Mon, Jan 26, 2009 at 9:53 AM, Carsten G. <
removed_email_address@domain.invalid> 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
Carsten G. (Guest)
on 2009-01-26 12:29
Andrew T. wrote:

> I don't get that error using Edge Rails

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

- Carsten
This topic is locked and can not be replied to.