123456789_123456789_123456789_123456789_123456789_

Class: TZInfo::TimeWithOffset

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Time
Instance Chain:
self, WithOffset, Time
Inherits: Time
  • Object
Defined in: lib/tzinfo/time_with_offset.rb

Overview

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.

Instance Attribute Summary

Instance Method Summary

WithOffset - Included

#strftime

Overrides the Time, DateTime or Timestamp version of strftime, replacing %Z with the abbreviation of the associated TimezoneOffset.

#if_timezone_offset

Performs a calculation if there is an associated TimezoneOffset.

Instance Attribute Details

#dst?Boolean (readonly) Also known as: #isdst

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

Returns:

  • (Boolean)

    true if daylight savings time is being observed, otherwise false.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 43

def dst?
  to = timezone_offset
  to ? to.dst? : super
end

#isdst (readonly)

Alias for #dst?.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 47

alias isdst dst?

#timezone_offsetTimezoneOffset (readonly)

Returns:

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 21

attr_reader :timezone_offset

Instance Method Details

#clear_timezone_offsetTimeWithOffset (protected)

Clears the associated TimezoneOffset.

Returns:

  • (TimeWithOffset)

    self.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 149

def clear_timezone_offset
  @timezone_offset = nil
  self
end

#getlocal(*args) ⇒ Time

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

Returns:

  • (Time)

    a representation of the TimeWithOffset using either the local time zone or the given offset.

[ GitHub ]

  
# 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

#gmtimeTimeWithOffset

An overridden version of Time#gmtime that clears the associated TimezoneOffset.

Returns:

  • (TimeWithOffset)

    self.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 69

def gmtime
  super
  @timezone_offset = nil
  self
end

#localtime(*args) ⇒ TimeWithOffset

An overridden version of Time#localtime that clears the associated TimezoneOffset.

Returns:

  • (TimeWithOffset)

    self.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 79

def localtime(*args)
  super
  @timezone_offset = nil
  self
end

#round(ndigits = 0) ⇒ Time

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

Returns:

  • (Time)

    the rounded time.

[ GitHub ]

  
# 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

#set_timezone_offset(timezone_offset) ⇒ TimeWithOffset

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

Parameters:

Returns:

  • (TimeWithOffset)

    self.

Raises:

[ GitHub ]

  
# 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

#to_aArray

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.

Returns:

  • (Array)

    an Array representation of the TimeWithOffset.

[ GitHub ]

  
# 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

#to_datetimeDateTime

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

Returns:

[ GitHub ]

  
# 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

#utcTimeWithOffset

An overridden version of Time#utc that clears the associated TimezoneOffset.

Returns:

  • (TimeWithOffset)

    self.

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 110

def utc
  super
  @timezone_offset = nil
  self
end

#zoneString

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

Returns:

[ GitHub ]

  
# File 'lib/tzinfo/time_with_offset.rb', line 123

def zone
  to = timezone_offset
  to ? to.abbreviation : super
end