I’ve been using ruby for years, but I’ve never had a good use for
DateTime. Since there’s so much discussion about it recently, maybe I
could ask again, why does it exist?
I always avoid using DateTime because:
It looks like a Time, but behaves like a Date:
plus_one_sec = Time.now + 1
plus_one_day = DateTime.now + 1
If it’s really meant to be a Date plus fractional values for the time of
day, then I think it should ignore time zones and utc offset completely
because it’s ambiguous. Date does not have a zone: only when you compare
times should you compare zones.
It ignores tzinfo, so moving over daylight savings time doesn’t
change the offset:
winter_time = Time.local(2014, 3, 9)
summer_time = winter_time + (24 * 60 * 60)
winter_dt = winter_time.to_datetime
summer_dt = winter_dt + 1
Here, +1 adds 24 hours to the local time, when the actual difference
should be 23 (with the offset change).
Its “zone” has no useful value.
dt = DateTime.new(2012,12,6, 1, 0, 0, “-07:00”)
dt.zone # => “-07:00”
dt.utc? # => NoMethodError: undefined method
utc?' dt.dst? # => NoMethodError: undefined methoddst?’
dt.utc_offset # => NoMethodError: undefined method `utc_offset’
I’m not sure what to think of the “%s %z” patch for DateTime.strptime
since I never use it. It makes sense that it should be consistent with
Time, but maybe DateTime itself is wrong-headed to begin with?