class TZInfo::TimeWithOffset

A subclass of ‘Time` used to represent local times. {TimeWithOffset} 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, {TimeWithOffset} behaves identically to `Time`.

Arithmetic performed on {TimeWithOffset} 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 (‘utc_offset`). The associated {TimezoneOffset} will aways be cleared.

Attributes

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

instance.

Public Instance Methods

An overridden version of ‘Time#dst?` that, if there is an associated {TimezoneOffset}, returns the result of calling {TimezoneOffset#dst? dst?} on that offset.

@return [Boolean] ‘true` if daylight savings time is being observed,

otherwise `false`.
Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 43
def dst?
  to = timezone_offset
  to ? to.dst? : super
end
Also aliased as: isdst

An overridden version of ‘Time#getlocal` that clears the associated {TimezoneOffset} if the base implementation of `getlocal` returns a {TimeWithOffset}.

@return [Time] a representation of the {TimeWithOffset} using either the

local time zone or the given offset.
Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 55
def getlocal(*args)
  # JRuby < 9.3 returns a Time in all cases.
  # JRuby >= 9.3 returns a Time when called with no arguments and a
  # TimeWithOffset with a timezone_offset assigned when called with an
  # offset argument.
  result = super
  result.clear_timezone_offset if result.kind_of?(TimeWithOffset)
  result
end

An overridden version of ‘Time#gmtime` that clears the associated {TimezoneOffset}.

@return [TimeWithOffset] ‘self`.

Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 69
def gmtime
  super
  @timezone_offset = nil
  self
end
Alias for: dst?

An overridden version of ‘Time#localtime` that clears the associated {TimezoneOffset}.

@return [TimeWithOffset] ‘self`.

Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 79
def localtime(*args)
  super
  @timezone_offset = nil
  self
end

An overridden version of ‘Time#round` that, if there is an associated {TimezoneOffset}, returns a {TimeWithOffset} preserving that offset.

@return [Time] the rounded time.

Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 89
def round(ndigits = 0)
  if_timezone_offset(super) {|o,t| self.class.at(t.to_i, t.subsec * 1_000_000).set_timezone_offset(o) }
end

Marks this {TimeWithOffset} as a local time with the UTC offset of a given {TimezoneOffset} and sets the associated {TimezoneOffset}.

@param timezone_offset [TimezoneOffset] the {TimezoneOffset} to use to set

the offset of this {TimeWithOffset}.

@return [TimeWithOffset] ‘self`. @raise [ArgumentError] if `timezone_offset` is `nil`.

# File lib/tzinfo/time_with_offset.rb, line 30
def set_timezone_offset(timezone_offset)
  raise ArgumentError, 'timezone_offset must be specified' unless timezone_offset
  localtime(timezone_offset.observed_utc_offset)
  @timezone_offset = timezone_offset
  self
end

An overridden version of ‘Time#to_a`. The `isdst` (index 8) and `zone` (index 9) elements of the array are set according to the associated {TimezoneOffset}.

@return [Array] an ‘Array` representation of the {TimeWithOffset}.

Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 98
def to_a
  if_timezone_offset(super) do |o,a|
    a[8] = o.dst?
    a[9] = o.abbreviation
    a
  end
end

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

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

{DateTimeWithOffset} representation of this {TimeWithOffset}, otherwise
a `Time` representation.
Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 135
def to_datetime
  if_timezone_offset(super) do |o,dt|
    offset = dt.offset
    result = DateTimeWithOffset.jd(dt.jd + dt.day_fraction - offset)
    result = result.new_offset(offset) unless offset == 0
    result.set_timezone_offset(o)
  end
end

An overridden version of ‘Time#utc` that clears the associated {TimezoneOffset}.

@return [TimeWithOffset] ‘self`.

Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 110
def utc
  super
  @timezone_offset = nil
  self
end

An overridden version of ‘Time#zone` that, if there is an associated {TimezoneOffset}, returns the {TimezoneOffset#abbreviation abbreviation} of that offset.

@return [String] the {TimezoneOffset#abbreviation abbreviation} of the

associated {TimezoneOffset}, or the result from `Time#zone` if there is
no such offset.
Calls superclass method
# File lib/tzinfo/time_with_offset.rb, line 123
def zone
  to = timezone_offset
  to ? to.abbreviation : super
end

Protected Instance Methods

Clears the associated {TimezoneOffset}.

@return [TimeWithOffset] ‘self`.

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