Class: TimeCrisis::TZInfo::TimezoneTransitionInfo

Inherits:
Object
  • Object
show all
Defined in:
lib/time_crisis/tzinfo/timezone_transition_info.rb

Overview

Represents an offset defined in a Timezone data file.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(offset, previous_offset, numerator_or_time, denominator = nil) ⇒ TimezoneTransitionInfo

Creates a new TimezoneTransitionInfo with the given offset, previous_offset (both TimezoneOffsetInfo instances) and UTC time. if denominator is nil, numerator_or_time is treated as a number of seconds since the epoch. If denominator is specified numerator_or_time and denominator are used to create a DateTime as follows:

DateTime.new!(Rational.send(:new!, numerator_or_time, denominator), 0, Date::ITALY)

For performance reasons, the numerator and denominator must be specified in their lowest form.



33
34
35
36
37
38
39
40
41
42
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 33

def initialize(offset, previous_offset, numerator_or_time, denominator = nil)
  @offset = offset
  @previous_offset = previous_offset
  @numerator_or_time = numerator_or_time
  @denominator = denominator

  @at = nil
  @local_end = nil
  @local_start = nil
end

Instance Attribute Details

#offsetObject (readonly)

The offset this transition changes to (a TimezoneOffsetInfo instance).



8
9
10
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 8

def offset
  @offset
end

#previous_offsetObject (readonly)

The offset this transition changes from (a TimezoneOffsetInfo instance).



11
12
13
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 11

def previous_offset
  @previous_offset
end

Instance Method Details

#==(tti) ⇒ Object

Returns true if this TimezoneTransitionInfo is equal to the given TimezoneTransitionInfo. Two TimezoneTransitionInfo instances are considered to be equal by == if offset, previous_offset and at are all equal.



79
80
81
82
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 79

def ==(tti)
  tti.respond_to?(:offset) && tti.respond_to?(:previous_offset) && tti.respond_to?(:at) &&
          offset == tti.offset && previous_offset == tti.previous_offset && at == tti.at
end

#atObject

A TimeOrDateTime instance representing the UTC time when this transition occurs.



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 46

def at
  unless @at
    unless @denominator
      @at = TimeOrDateTime.new(@numerator_or_time)
    else
      r = RubyCoreSupport.rational_new!(@numerator_or_time, @denominator)
      dt = RubyCoreSupport.datetime_new!(r, 0, (::Date::ITALY rescue 2299161))
      @at = TimeOrDateTime.new(dt)
    end
  end

  @at
end

#eql?(tti) ⇒ Boolean

Returns true if this TimezoneTransitionInfo is equal to the given TimezoneTransitionInfo. Two TimezoneTransitionInfo instances are considered to be equal by eql? if offset, previous_offset, numerator_or_time and denominator are all equal. This is stronger than ==, which just requires the at times to be equal regardless of how they were originally specified.

Returns:

  • (Boolean)


90
91
92
93
94
95
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 90

def eql?(tti)
  tti.respond_to?(:offset) && tti.respond_to?(:previous_offset) &&
          tti.respond_to?(:numerator_or_time) && tti.respond_to?(:denominator) &&
          offset == tti.offset && previous_offset == tti.previous_offset &&
          numerator_or_time == tti.numerator_or_time && denominator == tti.denominator
end

#hashObject

Returns a hash of this TimezoneTransitionInfo instance.



98
99
100
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 98

def hash
  @offset.hash ^ @previous_offset.hash ^ @numerator_or_time.hash ^ @denominator.hash
end

#inspectObject

Returns internal object state as a programmer-readable string.



103
104
105
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 103

def inspect
  "#<#{self.class}: #{at.inspect},#{@offset.inspect}>"
end

#local_endObject

A TimeOrDateTime instance representing the local time when this transition causes the previous observance to end (calculated from at using previous_offset).



63
64
65
66
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 63

def local_end
  @local_end = at.add_with_convert(@previous_offset.utc_total_offset) unless @local_end
  @local_end
end

#local_startObject

A TimeOrDateTime instance representing the local time when this transition causes the next observance to start (calculated from at using offset).



70
71
72
73
# File 'lib/time_crisis/tzinfo/timezone_transition_info.rb', line 70

def local_start
  @local_start = at.add_with_convert(@offset.utc_total_offset) unless @local_start
  @local_start
end