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#downto
that clears the associatedTimezoneOffset
of the returned or yielded instances. -
#england ⇒ DateTime
An overridden version of
DateTime#england
that preserves the associatedTimezoneOffset
. -
#gregorian ⇒ DateTime
An overridden version of
DateTime#gregorian
that preserves the associatedTimezoneOffset
. -
#italy ⇒ DateTime
An overridden version of
DateTime#italy
that preserves the associatedTimezoneOffset
. -
#julian ⇒ DateTime
An overridden version of
DateTime#julian
that preserves the associatedTimezoneOffset
. -
#new_start(start = Date::ITALY) ⇒ DateTime
An overridden version of
DateTime#new_start
that preserves the associatedTimezoneOffset
. -
#set_timezone_offset(timezone_offset) ⇒ DateTimeWithOffset
Sets the associated
TimezoneOffset
. -
#step(limit, step = 1)
An overridden version of
DateTime#step
that clears the associatedTimezoneOffset
of the returned or yielded instances. -
#to_time ⇒ Time
An overridden version of
DateTime#to_time
that, if there is an associatedTimezoneOffset
, returns aDateTimeWithOffset
with that offset. -
#upto(max)
An overridden version of
DateTime#upto
that clears the associatedTimezoneOffset
of 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