class TZInfo::DateTimeWithOffset

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.

Attributes

timezone_offset[R]

@return [TimezoneOffset] the {TimezoneOffset} associated with this

instance.

Public Instance Methods

downto(min) { |clear_timezone_offset| ... } click to toggle source

An overridden version of `DateTime#downto` that clears the associated {TimezoneOffset} of the returned or yielded instances.

Calls superclass method
# 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() click to toggle source

An overridden version of `DateTime#england` that preserves the associated {TimezoneOffset}.

@return [DateTime]

Calls superclass method
# 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() click to toggle source

An overridden version of `DateTime#gregorian` that preserves the associated {TimezoneOffset}.

@return [DateTime]

Calls superclass method
# 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() click to toggle source

An overridden version of `DateTime#italy` that preserves the associated {TimezoneOffset}.

@return [DateTime]

Calls superclass method
# 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() click to toggle source

An overridden version of `DateTime#julian` that preserves the associated {TimezoneOffset}.

@return [DateTime]

Calls superclass method
# 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) click to toggle source

An overridden version of `DateTime#new_start` that preserves the associated {TimezoneOffset}.

@return [DateTime]

Calls superclass method
# 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) click to toggle source

Sets the associated {TimezoneOffset}.

@param timezone_offset [TimezoneOffset] a {TimezoneOffset} valid at the

time and for the offset of this {DateTimeWithOffset}.

@return [DateTimeWithOffset] `self`. @raise [ArgumentError] if `timezone_offset` is `nil`. @raise [ArgumentError] if `timezone_offset.observed_utc_offset` does not

equal `self.offset * 86400`.
# 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) { |clear_timezone_offset| ... } click to toggle source

An overridden version of `DateTime#step` that clears the associated {TimezoneOffset} of the returned or yielded instances.

Calls superclass method
# 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() click to toggle source

An overridden version of `DateTime#to_time` that, if there is an associated {TimezoneOffset}, returns a {DateTimeWithOffset} with that offset.

@return [Time] if there is an associated {TimezoneOffset}, a

{TimeWithOffset} representation of this {DateTimeWithOffset}, otherwise
a `Time` representation.
Calls superclass method
# 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) { |clear_timezone_offset| ... } click to toggle source

An overridden version of `DateTime#upto` that clears the associated {TimezoneOffset} of the returned or yielded instances.

Calls superclass method
# 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

Protected Instance Methods

clear_timezone_offset() click to toggle source

Clears the associated {TimezoneOffset}.

@return [DateTimeWithOffset] `self`.

# File lib/tzinfo/datetime_with_offset.rb, line 148
def clear_timezone_offset
  @timezone_offset = nil
  self
end