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, DateTime or integer timestamps.
Instance Attribute Summary collapse
-
#end_transition ⇒ Object
readonly
The TimezoneTransitionInfo that defines the end of this TimezonePeriod (may be nil if unbounded).
-
#offset ⇒ Object
readonly
The TimezoneOffsetInfo for this period.
-
#start_transition ⇒ Object
readonly
The TimezoneTransitionInfo 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_start ⇒ Object
The start time of the period in local time as a DateTime.
-
#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_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_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.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/tzinfo/timezone_period.rb', line 44 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 TimezoneTransitionInfo that defines the end of this TimezonePeriod (may be nil if unbounded).
38 39 40 |
# File 'lib/tzinfo/timezone_period.rb', line 38 def end_transition @end_transition end |
#offset ⇒ Object (readonly)
The TimezoneOffsetInfo for this period.
41 42 43 |
# File 'lib/tzinfo/timezone_period.rb', line 41 def offset @offset end |
#start_transition ⇒ Object (readonly)
The TimezoneTransitionInfo that defines the start of this TimezonePeriod (may be nil if unbounded).
34 35 36 |
# File 'lib/tzinfo/timezone_period.rb', line 34 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 ==.
170 171 172 173 174 |
# File 'lib/tzinfo/timezone_period.rb', line 170 def ==(p) p.respond_to?(:start_transition) && p.respond_to?(:end_transition) && p.respond_to?(:offset) && 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.
79 80 81 |
# File 'lib/tzinfo/timezone_period.rb', line 79 def abbreviation @offset.abbreviation end |
#dst? ⇒ Boolean
true if daylight savings is in effect for this period; otherwise false.
120 121 122 |
# File 'lib/tzinfo/timezone_period.rb', line 120 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?
178 179 180 181 182 |
# File 'lib/tzinfo/timezone_period.rb', line 178 def eql?(p) p.respond_to?(:start_transition) && p.respond_to?(:end_transition) && p.respond_to?(:offset) && 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.
185 186 187 188 189 |
# File 'lib/tzinfo/timezone_period.rb', line 185 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.
192 193 194 195 196 |
# File 'lib/tzinfo/timezone_period.rb', line 192 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.
148 149 150 |
# File 'lib/tzinfo/timezone_period.rb', line 148 def local_after_start?(local) !@start_transition || @start_transition.local_start <= local end |
#local_before_end?(local) ⇒ Boolean
true if the given local DateTime is before the end of the period (exclusive); otherwise false.
154 155 156 |
# File 'lib/tzinfo/timezone_period.rb', line 154 def local_before_end?(local) !@end_transition || @end_transition.local_end > local end |
#local_end ⇒ Object
The end time of the period in local time as a DateTime. May be nil if unbounded.
115 116 117 |
# File 'lib/tzinfo/timezone_period.rb', line 115 def local_end @end_transition ? @end_transition.local_end.to_datetime : nil end |
#local_start ⇒ Object
The start time of the period in local time as a DateTime. May be nil if unbounded.
109 110 111 |
# File 'lib/tzinfo/timezone_period.rb', line 109 def local_start @start_transition ? @start_transition.local_start.to_datetime : 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.
72 73 74 |
# File 'lib/tzinfo/timezone_period.rb', line 72 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.
159 160 161 |
# File 'lib/tzinfo/timezone_period.rb', line 159 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.
164 165 166 |
# File 'lib/tzinfo/timezone_period.rb', line 164 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.
131 132 133 |
# File 'lib/tzinfo/timezone_period.rb', line 131 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.
137 138 139 |
# File 'lib/tzinfo/timezone_period.rb', line 137 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.
103 104 105 |
# File 'lib/tzinfo/timezone_period.rb', line 103 def utc_end @end_transition ? @end_transition.at.to_datetime : nil end |
#utc_offset ⇒ Object
Base offset of the timezone from UTC (seconds).
65 66 67 |
# File 'lib/tzinfo/timezone_period.rb', line 65 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.
98 99 100 |
# File 'lib/tzinfo/timezone_period.rb', line 98 def utc_start @start_transition ? @start_transition.at.to_datetime : nil end |
#utc_total_offset ⇒ Object
Total offset from UTC (seconds). Equal to utc_offset + std_offset.
85 86 87 |
# File 'lib/tzinfo/timezone_period.rb', line 85 def utc_total_offset @offset.utc_total_offset end |
#utc_total_offset_rational ⇒ Object
Total offset from UTC (days). Result is a Rational.
90 91 92 93 94 95 |
# File 'lib/tzinfo/timezone_period.rb', line 90 def utc_total_offset_rational 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.
142 143 144 |
# File 'lib/tzinfo/timezone_period.rb', line 142 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.
125 126 127 |
# File 'lib/tzinfo/timezone_period.rb', line 125 def valid_for_utc?(utc) utc_after_start?(utc) && utc_before_end?(utc) end |