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
(e-mail address removed)