Class: TZInfo::DateTimeWithOffset
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
DateTime
|
|
|
Instance Chain:
self,
WithOffset,
DateTime
|
|
| Inherits: |
DateTime
|
| Defined in: | lib/tzinfo/datetime_with_offset.rb |
Overview
A subclass of DateTime used to represent local times. DateTimeWithOffset
holds a reference to the related TimezoneOffset and overrides various
methods to return results appropriate for the TimezoneOffset. Certain
operations will clear the associated TimezoneOffset (if the
TimezoneOffset would not necessarily be valid for the result). Once the
TimezoneOffset has been cleared, DateTimeWithOffset behaves identically
to DateTime.
Arithmetic performed on DateTimeWithOffset instances is not time
zone-aware. Regardless of whether transitions in the time zone are crossed,
results of arithmetic operations will always maintain the same offset from
UTC (offset). The associated TimezoneOffset will aways be cleared.
Instance Attribute Summary
- #timezone_offset ⇒ TimezoneOffset readonly
Instance Method Summary
-
#downto(min)
An overridden version of
DateTime#downtothat clears the associatedTimezoneOffsetof the returned or yielded instances. -
#england ⇒ DateTime
An overridden version of
DateTime#englandthat preserves the associatedTimezoneOffset. -
#gregorian ⇒ DateTime
An overridden version of
DateTime#gregorianthat preserves the associatedTimezoneOffset. -
#italy ⇒ DateTime
An overridden version of
DateTime#italythat preserves the associatedTimezoneOffset. -
#julian ⇒ DateTime
An overridden version of
DateTime#julianthat preserves the associatedTimezoneOffset. -
#new_start(start = Date::ITALY) ⇒ DateTime
An overridden version of
DateTime#new_startthat preserves the associatedTimezoneOffset. -
#set_timezone_offset(timezone_offset) ⇒ DateTimeWithOffset
Sets the associated
TimezoneOffset. -
#step(limit, step = 1)
An overridden version of
DateTime#stepthat clears the associatedTimezoneOffsetof the returned or yielded instances. -
#to_time ⇒ Time
An overridden version of
DateTime#to_timethat, if there is an associatedTimezoneOffset, returns aDateTimeWithOffsetwith that offset. -
#upto(max)
An overridden version of
DateTime#uptothat clears the associatedTimezoneOffsetof the returned or yielded instances. -
#clear_timezone_offset ⇒ DateTimeWithOffset
protected
Clears the associated
TimezoneOffset.
WithOffset - Included
| #strftime | Overrides the |
| #if_timezone_offset | Performs a calculation if there is an associated |
Instance Attribute Details
#timezone_offset ⇒ TimezoneOffset (readonly)
# File 'lib/tzinfo/datetime_with_offset.rb', line 24
attr_reader :timezone_offset
Instance Method Details
#clear_timezone_offset ⇒ DateTimeWithOffset (protected)
Clears the associated TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 148
def clear_timezone_offset @timezone_offset = nil self end
#downto(min)
An overridden version of DateTime#downto that clears the associated
TimezoneOffset of the returned or yielded instances.
# File 'lib/tzinfo/datetime_with_offset.rb', line 61
def downto(min) if block_given? super {|dt| yield dt.clear_timezone_offset } else enum = super enum.each {|dt| dt.clear_timezone_offset } enum end end
#england ⇒ DateTime
An overridden version of DateTime#england that preserves the associated
TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 75
def england # super doesn't call #new_start on MRI, so each method has to be # individually overridden. if_timezone_offset(super) {|o,dt| dt.set_timezone_offset(o) } end
#gregorian ⇒ DateTime
An overridden version of DateTime#gregorian that preserves the
associated TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 85
def gregorian # super doesn't call #new_start on MRI, so each method has to be # individually overridden. if_timezone_offset(super) {|o,dt| dt.set_timezone_offset(o) } end
#italy ⇒ DateTime
An overridden version of DateTime#italy that preserves the associated
TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 95
def italy # super doesn't call #new_start on MRI, so each method has to be # individually overridden. if_timezone_offset(super) {|o,dt| dt.set_timezone_offset(o) } end
#julian ⇒ DateTime
An overridden version of DateTime#julian that preserves the associated
TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 105
def julian # super doesn't call #new_start on MRI, so each method has to be # individually overridden. if_timezone_offset(super) {|o,dt| dt.set_timezone_offset(o) } end
#new_start(start = Date::ITALY) ⇒ DateTime
An overridden version of DateTime#new_start that preserves the
associated TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 115
def new_start(start = Date::ITALY) if_timezone_offset(super) {|o,dt| dt.set_timezone_offset(o) } end
#set_timezone_offset(timezone_offset) ⇒ DateTimeWithOffset
Sets the associated TimezoneOffset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 34
def set_timezone_offset(timezone_offset) raise ArgumentError, 'timezone_offset must be specified' unless timezone_offset raise ArgumentError, 'timezone_offset.observed_utc_offset does not match self.utc_offset' if offset * 86400 != timezone_offset.observed_utc_offset @timezone_offset = timezone_offset self end
#step(limit, step = 1)
An overridden version of DateTime#step that clears the associated
TimezoneOffset of the returned or yielded instances.
# File 'lib/tzinfo/datetime_with_offset.rb', line 121
def step(limit, step = 1) if block_given? super {|dt| yield dt.clear_timezone_offset } else enum = super enum.each {|dt| dt.clear_timezone_offset } enum end end
#to_time ⇒ Time
An overridden version of DateTime#to_time that, if there is an
associated TimezoneOffset, returns a DateTimeWithOffset with that
offset.
# File 'lib/tzinfo/datetime_with_offset.rb', line 48
def to_time if_timezone_offset(super) do |o,t| # Ruby 2.4.0 changed the behaviour of to_time so that it preserves the # offset instead of converting to the system local timezone. # # When self has an associated TimezonePeriod, this implementation will # preserve the offset on all versions of Ruby. TimeWithOffset.at(t.to_i, t.subsec * 1_000_000).set_timezone_offset(o) end end
#upto(max)
An overridden version of DateTime#upto that clears the associated
TimezoneOffset of the returned or yielded instances.
# File 'lib/tzinfo/datetime_with_offset.rb', line 133
def upto(max) if block_given? super {|dt| yield dt.clear_timezone_offset } else enum = super enum.each {|dt| dt.clear_timezone_offset } enum end end