Class: TZInfo::DataSources::TransitionsDataTimezoneInfo
- Inherits:
-
DataTimezoneInfo
- Object
- TimezoneInfo
- DataTimezoneInfo
- TZInfo::DataSources::TransitionsDataTimezoneInfo
- Defined in:
- lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb
Overview
Represents a data time zone defined by a list of transitions that change the locally observed time.
Instance Attribute Summary collapse
-
#transitions ⇒ Array<TimezoneTransition>
readonly
The transitions that define this time zone in order of ascending timestamp.
Attributes inherited from TimezoneInfo
Instance Method Summary collapse
-
#initialize(identifier, transitions) ⇒ TransitionsDataTimezoneInfo
constructor
Initializes a new TransitionsDataTimezoneInfo.
-
#period_for(timestamp) ⇒ TimezonePeriod
The TimezonePeriod observed at the time specified by ‘timestamp`.
-
#periods_for_local(local_timestamp) ⇒ Array<TimezonePeriod>
Returns an ‘Array` containing the TimezonePeriods that could be observed at the local time specified by `local_timestamp`.
-
#transitions_up_to(to_timestamp, from_timestamp = nil) ⇒ Array<TimezoneTransition>
Returns an ‘Array` of TimezoneTransition instances representing the times where the UTC offset of the time zone changes.
Methods inherited from DataTimezoneInfo
Methods inherited from TimezoneInfo
Constructor Details
#initialize(identifier, transitions) ⇒ TransitionsDataTimezoneInfo
Initializes a new TZInfo::DataSources::TransitionsDataTimezoneInfo.
The passed in ‘identifier` instance will be frozen. A reference to the passed in `Array` will be retained.
The ‘transitions` `Array` must be sorted in order of ascending timestamp. Each transition must have a timestamp_value that is greater than the timestamp_value of the prior transition.
31 32 33 34 35 36 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb', line 31 def initialize(identifier, transitions) super(identifier) raise ArgumentError, 'transitions must be specified' unless transitions raise ArgumentError, 'transitions must not be an empty Array' if transitions.empty? @transitions = transitions.freeze end |
Instance Attribute Details
#transitions ⇒ Array<TimezoneTransition> (readonly)
Returns the transitions that define this time zone in order of ascending timestamp.
11 12 13 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb', line 11 def transitions @transitions end |
Instance Method Details
#period_for(timestamp) ⇒ TimezonePeriod
Returns the TimezonePeriod observed at the time specified by ‘timestamp`.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb', line 39 def period_for() raise ArgumentError, 'timestamp must be specified' unless raise ArgumentError, 'timestamp must have a specified utc_offset' unless .utc_offset = .value index = find_minimum_transition {|t| t. >= } if index transition = @transitions[index] if transition. == # timestamp occurs within the second of the found transition, so is # the transition that starts the period. start_transition = transition end_transition = @transitions[index + 1] else # timestamp occurs before the second of the found transition, so is # the transition that ends the period. start_transition = index == 0 ? nil : @transitions[index - 1] end_transition = transition end else start_transition = @transitions.last end_transition = nil end TransitionsTimezonePeriod.new(start_transition, end_transition) end |
#periods_for_local(local_timestamp) ⇒ Array<TimezonePeriod>
Returns an ‘Array` containing the TimezonePeriods that could be observed at the local time specified by `local_timestamp`. The results are are ordered by increasing UTC start date. An empty `Array` is returned if no periods are found for the given local time.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb', line 70 def periods_for_local() raise ArgumentError, 'local_timestamp must be specified' unless raise ArgumentError, 'local_timestamp must have an unspecified utc_offset' if .utc_offset = .value latest_possible_utc_value = + 86400 earliest_possible_utc_value = - 86400 # Find the index of the first transition that occurs after a latest # possible UTC representation of the local timestamp and then search # backwards until an earliest possible UTC representation. index = find_minimum_transition {|t| t. >= latest_possible_utc_value } # No transitions after latest_possible_utc_value, set to max index + 1 # to search backwards including the period after the last transition index = @transitions.length unless index result = [] index.downto(0) do |i| start_transition = i > 0 ? @transitions[i - 1] : nil end_transition = @transitions[i] offset = start_transition ? start_transition.offset : end_transition.previous_offset = - offset.observed_utc_offset # It is not necessary to compare the sub-seconds because a timestamp # is in the period if is >= the start transition (sub-seconds would # make == become >) and if it is < the end transition (which # sub-seconds cannot affect). if (!start_transition || >= start_transition.) && (!end_transition || < end_transition.) result << TransitionsTimezonePeriod.new(start_transition, end_transition) elsif end_transition && end_transition. < earliest_possible_utc_value break end end result.reverse! end |
#transitions_up_to(to_timestamp, from_timestamp = nil) ⇒ Array<TimezoneTransition>
Returns an ‘Array` of TimezoneTransition instances representing the times where the UTC offset of the time zone changes.
Transitions are returned up to a given Timestamp (‘to_timestamp`).
A from Timestamp may also be supplied using the ‘from_timestamp` parameter. If `from_timestamp` is specified, only transitions from that time onwards will be returned.
Comparisons with ‘to_timestamp` are exclusive. Comparisons with `from_timestamp` are inclusive. If a transition falls precisely on `to_timestamp`, it will be excluded. If a transition falls on `from_timestamp`, it will be included.
Transitions returned are ordered by when they occur, from earliest to latest.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/rubypitaya/app-template/vendor/bundle/ruby/3.1.0/gems/tzinfo-2.0.5/lib/tzinfo/data_sources/transitions_data_timezone_info.rb', line 111 def transitions_up_to(, = nil) raise ArgumentError, 'to_timestamp must be specified' unless raise ArgumentError, 'to_timestamp must have a specified utc_offset' unless .utc_offset if raise ArgumentError, 'from_timestamp must have a specified utc_offset' unless .utc_offset raise ArgumentError, 'to_timestamp must be greater than from_timestamp' if <= end if from_index = find_minimum_transition {|t| (t, ) } return [] unless from_index else from_index = 0 end to_index = find_minimum_transition {|t| (t, ) } if to_index return [] if to_index < 1 to_index -= 1 else to_index = -1 end @transitions[from_index..to_index] end |