On Feb 8, 2007, at 4:17 PM, Johan Veenstra wrote:

> On 2/6/07, Alexandru E. Ungur <alexandru / globalterrasoft.ro> wrote:
>>
>> >>> sender: "Toine" date: "Tue, Feb 06, 2007 at 08:00:06PM +0900"  
>> <<<EOQ
>> > Date.today + 31 and Time.now + 31*24*60*60 yield the same results.
>> Just beware that although they yield the same result they do it at
>> *very* different speeds:
>>
>> ~>> cat date_vs_time.rb
>> require 'benchmark'
>> require 'date'
>>
>> n = 100_000
>> Benchmark.bm do |x|
>>   x.report { n.times do a = Date.today+31; end }
>>   x.report { n.times do a = Time.now+2678400; end }
>> end
>>
>>
>> ~>> ruby date_vs_time.rb
>>       user     system      total        real
>> 24.300000   0.760000  25.060000 ( 31.808122)
>>   0.410000   0.440000   0.850000 (  0.971718)
>>
>>
>> So, whenever you can get away with Time, use it. Only use Date when
>> you have to.
>>
>>
>> Cheers,
>> Alex
>>
>>
>
> require 'date'
>
> puts Date.today
> puts Date.today + 100
> puts Time.now
> puts Time.now + 100*24*60*60
>
> 2007-02-08
> 2007-05-19
> Thu Feb 08 22:05:49 W. Europe Standard Time 2007
> Sat May 19 23:05:49 W. Europe Daylight Time 2007
>
> Looks innocent enough, but when I run the same program again in 60  
> minutes,
> Time.now + 100*60*60 would output:
> Sun May 20 00:05:49 W. Europe Daylight Time 2007 (which is my  
> birthday by
> the way).
>
> So from a correctness point of view, use Date when you are dealing  
> with
> dates,
> and use Time when you are dealing with time.

Assuming you want to (or need to) use Time, then you can... if you  
use ActiveSupport

#!/usr/bin/env ruby -w
require 'rubygems'
gem 'activesupport', '>=1.4'

require 'date'
puts "with Date:"
puts "today: #{Date.today}"
puts "+ 100: #{Date.today + 100}"
puts "with Time:"
puts "        now: #{Time.now}"
puts "+ 8_640_000: #{Time.now + 100*24*60*60}"

puts "Time with some ActiveSupport from those Rails guys:"
require 'active_support'
puts "        now: #{Time.now}"
puts " + 100.days: #{Time.now + 100.days}"
puts "in 100.days: #{Time.now.in(100.days)}"
__END__


with Date:
today: 2007-02-08
+ 100: 2007-05-19
with Time:
         now: Thu Feb 08 17:11:43 -0500 2007
+ 8_640_000: Sat May 19 18:11:43 -0400 2007
Time with some ActiveSupport from those Rails guys:
         now: Thu Feb 08 17:11:43 -0500 2007
  + 100.days: Sat May 19 18:11:43 -0400 2007
in 100.days: Sat May 19 17:11:43 -0400 2007

Notice that the last line has recognized (and corrected for) the  
Daylight Savings transition

-Rob

Rob Biedenharn		http://agileconsultingllc.com
Rob / AgileConsultingLLC.com