lib/tzinfo/time_or_datetime.rb in tzinfo-0.2.0 vs lib/tzinfo/time_or_datetime.rb in tzinfo-0.2.1
- old
+ new
@@ -29,11 +29,12 @@
# timestamp (seconds since 1970-01-01 00:00:00).
class TimeOrDateTime #:nodoc:
include Comparable
# Constructs a new TimeOrDateTime. timeOrDateTime can be a Time, DateTime
- # or an integer. If using a Time, any time zone information is ignored.
+ # or an integer. If using a Time or DateTime, any time zone information is
+ # ignored.
def initialize(timeOrDateTime)
@time = nil
@datetime = nil
@timestamp = nil
@@ -41,10 +42,11 @@
@time = timeOrDateTime
@time = Time.utc(@time.year, @time.mon, @time.mday, @time.hour, @time.min, @time.sec) unless @time.zone == 'UTC'
@orig = @time
elsif timeOrDateTime.is_a?(DateTime)
@datetime = timeOrDateTime
+ @datetime = @datetime.new_offset(0) unless @datetime.offset == 0
@orig = @datetime
else
@timestamp = timeOrDateTime.to_i
@orig = @timestamp
end
@@ -169,11 +171,21 @@
# timestamp or TimeOrDateTime. Returns -1, 0 or +1 depending whether the
# receiver is less than, equal to, or greater than timeOrDateTime.
#
# Milliseconds and smaller units are ignored in the comparison.
def <=>(timeOrDateTime)
- if timeOrDateTime.is_a?(TimeOrDateTime)
- self <=> timeOrDateTime.orig
+ if timeOrDateTime.is_a?(TimeOrDateTime)
+ orig = timeOrDateTime.to_orig
+
+ if @orig.is_a?(DateTime) || orig.is_a?(DateTime)
+ # If either is a DateTime, assume it is there for a reason
+ # (i.e. for range).
+ to_datetime <=> timeOrDateTime.to_datetime
+ elsif orig.is_a?(Time)
+ to_time <=> timeOrDateTime.to_time
+ else
+ to_i <=> timeOrDateTime.to_i
+ end
elsif @orig.is_a?(DateTime) || timeOrDateTime.is_a?(DateTime)
# If either is a DateTime, assume it is there for a reason
# (i.e. for range).
to_datetime <=> TimeOrDateTime.wrap(timeOrDateTime).to_datetime
elsif timeOrDateTime.is_a?(Time)