Class: TZInfo::TimezonePeriod
- Inherits:
-
Object
- Object
- TZInfo::TimezonePeriod
- Defined in:
- lib/tzinfo/timezone_period.rb
Overview
A period of time in a timezone where the same offset from UTC applies.
All the methods that take times accept instances of Time or DateTime as well as Integer timestamps.
Instance Attribute Summary collapse
-
#end_transition ⇒ Object
readonly
The TimezoneTransition that defines the end of this TimezonePeriod (may be nil if unbounded).
-
#offset ⇒ Object
readonly
The TimezoneOffset for this period.
-
#start_transition ⇒ Object
readonly
The TimezoneTransition that defines the start of this TimezonePeriod (may be nil if unbounded).
Instance Method Summary collapse
-
#==(p) ⇒ Object
Returns true if this TimezonePeriod is equal to p.
-
#abbreviation ⇒ Object
(also: #zone_identifier)
The identifier of this period, e.g.
-
#dst? ⇒ Boolean
true if daylight savings is in effect for this period; otherwise false.
-
#eql?(p) ⇒ Boolean
Returns true if this TimezonePeriods is equal to p.
-
#hash ⇒ Object
Returns a hash of this TimezonePeriod.
-
#initialize(start_transition, end_transition, offset = nil) ⇒ TimezonePeriod
constructor
Initializes a new TimezonePeriod.
-
#inspect ⇒ Object
Returns internal object state as a programmer-readable string.
-
#local_after_start?(local) ⇒ Boolean
true if the given local DateTime is after the start of the period (inclusive); otherwise false.
-
#local_before_end?(local) ⇒ Boolean
true if the given local DateTime is before the end of the period (exclusive); otherwise false.
-
#local_end ⇒ Object
The end time of the period in local time as a DateTime.
-
#local_end_time ⇒ Object
The end time of the period in local time as a Time.
-
#local_start ⇒ Object
The start time of the period in local time as a DateTime.
-
#local_start_time ⇒ Object
The start time of the period in local time as a Time.
-
#std_offset ⇒ Object
Offset from the local time where daylight savings is in effect (seconds).
-
#to_local(utc) ⇒ Object
Converts a UTC DateTime to local time based on the offset of this period.
-
#to_utc(local) ⇒ Object
Converts a local DateTime to UTC based on the offset of this period.
-
#utc_after_start?(utc) ⇒ Boolean
true if the given UTC DateTime is after the start of the period (inclusive); otherwise false.
-
#utc_before_end?(utc) ⇒ Boolean
true if the given UTC DateTime is before the end of the period (exclusive); otherwise false.
-
#utc_end ⇒ Object
The end time of the period in UTC as a DateTime.
-
#utc_end_time ⇒ Object
The end time of the period in UTC as a Time.
-
#utc_offset ⇒ Object
Base offset of the timezone from UTC (seconds).
-
#utc_start ⇒ Object
The start time of the period in UTC as a DateTime.
-
#utc_start_time ⇒ Object
The start time of the period in UTC as a Time.
-
#utc_total_offset ⇒ Object
Total offset from UTC (seconds).
-
#utc_total_offset_rational ⇒ Object
Total offset from UTC (days).
-
#valid_for_local?(local) ⇒ Boolean
true if this period is valid for the given local DateTime; otherwise false.
-
#valid_for_utc?(utc) ⇒ Boolean
true if this period is valid for the given UTC DateTime; otherwise false.
Constructor Details
#initialize(start_transition, end_transition, offset = nil) ⇒ TimezonePeriod
Initializes a new TimezonePeriod.
TimezonePeriod instances should not normally be constructed manually.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/tzinfo/timezone_period.rb', line 21 def initialize(start_transition, end_transition, offset = nil) @start_transition = start_transition @end_transition = end_transition if offset raise ArgumentError, 'Offset specified with transitions' if @start_transition || @end_transition @offset = offset else if @start_transition @offset = @start_transition.offset elsif @end_transition @offset = @end_transition.previous_offset else raise ArgumentError, 'No offset specified and no transitions to determine it from' end end @utc_total_offset_rational = nil end |
Instance Attribute Details
#end_transition ⇒ Object (readonly)
The TimezoneTransition that defines the end of this TimezonePeriod (may be nil if unbounded).
13 14 15 |
# File 'lib/tzinfo/timezone_period.rb', line 13 def end_transition @end_transition end |
#offset ⇒ Object (readonly)
The TimezoneOffset for this period.
16 17 18 |
# File 'lib/tzinfo/timezone_period.rb', line 16 def offset @offset end |
#start_transition ⇒ Object (readonly)
The TimezoneTransition that defines the start of this TimezonePeriod (may be nil if unbounded).
9 10 11 |
# File 'lib/tzinfo/timezone_period.rb', line 9 def start_transition @start_transition end |
Instance Method Details
#==(p) ⇒ Object
Returns true if this TimezonePeriod is equal to p. This compares the start_transition, end_transition and offset using ==.
174 175 176 177 178 179 |
# File 'lib/tzinfo/timezone_period.rb', line 174 def ==(p) p.kind_of?(TimezonePeriod) && start_transition == p.start_transition && end_transition == p.end_transition && offset == p.offset end |
#abbreviation ⇒ Object Also known as: zone_identifier
The identifier of this period, e.g. “GMT” (Greenwich Mean Time) or “BST” (British Summer Time) for “Europe/London”. The returned identifier is a symbol.
56 57 58 |
# File 'lib/tzinfo/timezone_period.rb', line 56 def abbreviation @offset.abbreviation end |
#dst? ⇒ Boolean
true if daylight savings is in effect for this period; otherwise false.
124 125 126 |
# File 'lib/tzinfo/timezone_period.rb', line 124 def dst? @offset.dst? end |
#eql?(p) ⇒ Boolean
Returns true if this TimezonePeriods is equal to p. This compares the start_transition, end_transition and offset using eql?
183 184 185 186 187 188 |
# File 'lib/tzinfo/timezone_period.rb', line 183 def eql?(p) p.kind_of?(TimezonePeriod) && start_transition.eql?(p.start_transition) && end_transition.eql?(p.end_transition) && offset.eql?(p.offset) end |
#hash ⇒ Object
Returns a hash of this TimezonePeriod.
191 192 193 194 195 |
# File 'lib/tzinfo/timezone_period.rb', line 191 def hash result = @start_transition.hash ^ @end_transition.hash result ^= @offset.hash unless @start_transition || @end_transition result end |
#inspect ⇒ Object
Returns internal object state as a programmer-readable string.
198 199 200 201 202 |
# File 'lib/tzinfo/timezone_period.rb', line 198 def inspect result = "#<#{self.class}: #{@start_transition.inspect},#{@end_transition.inspect}" result << ",#{@offset.inspect}>" unless @start_transition || @end_transition result + '>' end |
#local_after_start?(local) ⇒ Boolean
true if the given local DateTime is after the start of the period (inclusive); otherwise false.
152 153 154 |
# File 'lib/tzinfo/timezone_period.rb', line 152 def local_after_start?(local) !@start_transition || @start_transition.local_start_at <= local end |
#local_before_end?(local) ⇒ Boolean
true if the given local DateTime is before the end of the period (exclusive); otherwise false.
158 159 160 |
# File 'lib/tzinfo/timezone_period.rb', line 158 def local_before_end?(local) !@end_transition || @end_transition.local_end_at > local end |
#local_end ⇒ Object
The end time of the period in local time as a DateTime. May be nil if unbounded.
113 114 115 |
# File 'lib/tzinfo/timezone_period.rb', line 113 def local_end @end_transition ? @end_transition.local_end_at.to_datetime : nil end |
#local_end_time ⇒ Object
The end time of the period in local time as a Time. May be nil if unbounded.
119 120 121 |
# File 'lib/tzinfo/timezone_period.rb', line 119 def local_end_time @end_transition ? @end_transition.local_end_at.to_time : nil end |
#local_start ⇒ Object
The start time of the period in local time as a DateTime. May be nil if unbounded.
101 102 103 |
# File 'lib/tzinfo/timezone_period.rb', line 101 def local_start @start_transition ? @start_transition.local_start_at.to_datetime : nil end |
#local_start_time ⇒ Object
The start time of the period in local time as a Time. May be nil if unbounded.
107 108 109 |
# File 'lib/tzinfo/timezone_period.rb', line 107 def local_start_time @start_transition ? @start_transition.local_start_at.to_time : nil end |
#std_offset ⇒ Object
Offset from the local time where daylight savings is in effect (seconds). E.g.: utc_offset could be -5 hours. Normally, std_offset would be 0. During daylight savings, std_offset would typically become +1 hours.
49 50 51 |
# File 'lib/tzinfo/timezone_period.rb', line 49 def std_offset @offset.std_offset end |
#to_local(utc) ⇒ Object
Converts a UTC DateTime to local time based on the offset of this period.
163 164 165 |
# File 'lib/tzinfo/timezone_period.rb', line 163 def to_local(utc) @offset.to_local(utc) end |
#to_utc(local) ⇒ Object
Converts a local DateTime to UTC based on the offset of this period.
168 169 170 |
# File 'lib/tzinfo/timezone_period.rb', line 168 def to_utc(local) @offset.to_utc(local) end |
#utc_after_start?(utc) ⇒ Boolean
true if the given UTC DateTime is after the start of the period (inclusive); otherwise false.
135 136 137 |
# File 'lib/tzinfo/timezone_period.rb', line 135 def utc_after_start?(utc) !@start_transition || @start_transition.at <= utc end |
#utc_before_end?(utc) ⇒ Boolean
true if the given UTC DateTime is before the end of the period (exclusive); otherwise false.
141 142 143 |
# File 'lib/tzinfo/timezone_period.rb', line 141 def utc_before_end?(utc) !@end_transition || @end_transition.at > utc end |
#utc_end ⇒ Object
The end time of the period in UTC as a DateTime. May be nil if unbounded.
90 91 92 |
# File 'lib/tzinfo/timezone_period.rb', line 90 def utc_end @end_transition ? @end_transition.at.to_datetime : nil end |
#utc_end_time ⇒ Object
The end time of the period in UTC as a Time. May be nil if unbounded.
95 96 97 |
# File 'lib/tzinfo/timezone_period.rb', line 95 def utc_end_time @end_transition ? @end_transition.at.to_time : nil end |
#utc_offset ⇒ Object
Base offset of the timezone from UTC (seconds).
42 43 44 |
# File 'lib/tzinfo/timezone_period.rb', line 42 def utc_offset @offset.utc_offset end |
#utc_start ⇒ Object
The start time of the period in UTC as a DateTime. May be nil if unbounded.
80 81 82 |
# File 'lib/tzinfo/timezone_period.rb', line 80 def utc_start @start_transition ? @start_transition.at.to_datetime : nil end |
#utc_start_time ⇒ Object
The start time of the period in UTC as a Time. May be nil if unbounded.
85 86 87 |
# File 'lib/tzinfo/timezone_period.rb', line 85 def utc_start_time @start_transition ? @start_transition.at.to_time : nil end |
#utc_total_offset ⇒ Object
Total offset from UTC (seconds). Equal to utc_offset + std_offset.
62 63 64 |
# File 'lib/tzinfo/timezone_period.rb', line 62 def utc_total_offset @offset.utc_total_offset end |
#utc_total_offset_rational ⇒ Object
Total offset from UTC (days). Result is a Rational.
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/tzinfo/timezone_period.rb', line 67 def utc_total_offset_rational # Thread-safety: It is possible that the value of # @utc_total_offset_rational may be calculated multiple times in # concurrently executing threads. It is not worth the overhead of locking # to ensure that @zone_identifiers is only calculated once. unless @utc_total_offset_rational @utc_total_offset_rational = OffsetRationals.rational_for_offset(utc_total_offset) end @utc_total_offset_rational end |
#valid_for_local?(local) ⇒ Boolean
true if this period is valid for the given local DateTime; otherwise false.
146 147 148 |
# File 'lib/tzinfo/timezone_period.rb', line 146 def valid_for_local?(local) local_after_start?(local) && local_before_end?(local) end |
#valid_for_utc?(utc) ⇒ Boolean
true if this period is valid for the given UTC DateTime; otherwise false.
129 130 131 |
# File 'lib/tzinfo/timezone_period.rb', line 129 def valid_for_utc?(utc) utc_after_start?(utc) && utc_before_end?(utc) end |