Class: TZInfo::TimeWithOffset

Inherits:
Time
  • Object
show all
Includes:
WithOffset
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 collapse

Instance Method Summary collapse

Methods included from WithOffset

#strftime

Instance Attribute Details

#timezone_offsetTimezoneOffset (readonly)

Returns the TZInfo::TimezoneOffset associated with this instance.

Returns:



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

def timezone_offset
  @timezone_offset
end

Instance Method Details

#clear_timezone_offsetTimeWithOffset (protected)

Clears the associated TZInfo::TimezoneOffset.

Returns:



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

def clear_timezone_offset
  @timezone_offset = nil
  self
end

#dst?Boolean Also known as: isdst

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

Returns:

  • (Boolean)

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



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

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

#getlocal(*args) ⇒ Time

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

Returns:

  • (Time)

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



55
56
57
58
59
60
61
62
63
# 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 TZInfo::TimezoneOffset.

Returns:



69
70
71
72
73
# 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 TZInfo::TimezoneOffset.

Returns:



79
80
81
82
83
# 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 TZInfo::TimezoneOffset, returns a TZInfo::TimeWithOffset preserving that offset.

Returns:

  • (Time)

    the rounded time.



89
90
91
# 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 TZInfo::TimeWithOffset as a local time with the UTC offset of a given TZInfo::TimezoneOffset and sets the associated TZInfo::TimezoneOffset.

Parameters:

Returns:

Raises:

  • (ArgumentError)

    if timezone_offset is nil.



30
31
32
33
34
35
# 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 TZInfo::TimezoneOffset.

Returns:



98
99
100
101
102
103
104
# 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 TZInfo::TimezoneOffset, returns a DateTimeWithOffset with that offset.

Returns:



135
136
137
138
139
140
141
142
# 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 TZInfo::TimezoneOffset.

Returns:



110
111
112
113
114
# 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 TZInfo::TimezoneOffset, returns the abbreviation of that offset.

Returns:



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

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