class TZInfo::TimezonePeriod

A period of time in a timezone where the same offset from UTC applies.

All the methods that take times accept instances of Time or DateTime as well as Integer timestamps.

Attributes

end_transition[R]

The TimezoneTransition that defines the end of this TimezonePeriod (may be nil if unbounded).

offset[R]

The TimezoneOffset for this period.

start_transition[R]

The TimezoneTransition that defines the start of this TimezonePeriod (may be nil if unbounded).

Public Class Methods

new(start_transition, end_transition, offset = nil) click to toggle source

Initializes a new TimezonePeriod.

TimezonePeriod instances should not normally be constructed manually.

# File lib/tzinfo/timezone_period.rb, line 21
def initialize(start_transition, end_transition, offset = nil)
  @start_transition = start_transition
  @end_transition = end_transition
  
  if offset
    raise ArgumentError, 'Offset specified with transitions' if @start_transition || @end_transition
    @offset = offset
  else
    if @start_transition 
      @offset = @start_transition.offset
    elsif @end_transition
      @offset = @end_transition.previous_offset
    else
      raise ArgumentError, 'No offset specified and no transitions to determine it from'
    end
  end
  
  @utc_total_offset_rational = nil      
end

Public Instance Methods

==(p) click to toggle source

Returns true if this TimezonePeriod is equal to p. This compares the start_transition, end_transition and offset using ==.

# File lib/tzinfo/timezone_period.rb, line 215
def ==(p)
  p.kind_of?(TimezonePeriod) &&
    start_transition == p.start_transition &&
    end_transition == p.end_transition &&
    offset == p.offset
end
abbreviation() click to toggle source

The identifier of this period, e.g. “GMT” (Greenwich Mean Time) or “BST” (British Summer Time) for “Europe/London”. The returned identifier is a symbol.

# File lib/tzinfo/timezone_period.rb, line 78
def abbreviation
  @offset.abbreviation
end
Also aliased as: zone_identifier
dst?() click to toggle source

true if daylight savings is in effect for this period; otherwise false.

# File lib/tzinfo/timezone_period.rb, line 148
def dst?
  @offset.dst?
end
eql?(p) click to toggle source

Returns true if this TimezonePeriods is equal to p. This compares the start_transition, end_transition and offset using eql?

# File lib/tzinfo/timezone_period.rb, line 224
def eql?(p)
  p.kind_of?(TimezonePeriod) &&
    start_transition.eql?(p.start_transition) &&
    end_transition.eql?(p.end_transition) &&
    offset.eql?(p.offset)
end
hash() click to toggle source

Returns a hash of this TimezonePeriod.

# File lib/tzinfo/timezone_period.rb, line 232
def hash
  result = @start_transition.hash ^ @end_transition.hash
  result ^= @offset.hash unless @start_transition || @end_transition
  result       
end
inspect() click to toggle source

Returns internal object state as a programmer-readable string.

# File lib/tzinfo/timezone_period.rb, line 239
def inspect
  result = "#<#{self.class}: #{@start_transition.inspect},#{@end_transition.inspect}"
  result << ",#{@offset.inspect}>" unless @start_transition || @end_transition
  result + '>'
end
local_after_start?(local) click to toggle source

true if the given local DateTime is after the start of the period (inclusive); otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 187
def local_after_start?(local)
  !@start_transition || @start_transition.local_start_at <= local
end
local_before_end?(local) click to toggle source

true if the given local DateTime is before the end of the period (exclusive); otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 195
def local_before_end?(local)
  !@end_transition || @end_transition.local_end_at > local
end
local_end() click to toggle source

The end time of the period in local time as a DateTime. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 137
def local_end
  @end_transition ? @end_transition.local_end_at.to_datetime : nil
end
local_end_time() click to toggle source

The end time of the period in local time as a Time. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 143
def local_end_time
  @end_transition ? @end_transition.local_end_at.to_time : nil
end
local_start() click to toggle source

The start time of the period in local time as a DateTime. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 125
def local_start
  @start_transition ? @start_transition.local_start_at.to_datetime : nil
end
local_start_time() click to toggle source

The start time of the period in local time as a Time. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 131
def local_start_time
  @start_transition ? @start_transition.local_start_at.to_time : nil
end
std_offset() click to toggle source

The offset from the time zone's standard time in seconds. Zero when daylight savings time is not in effect. Non-zero (usually 3600 = 1 hour) if daylight savings is being observed.

Note that zoneinfo files only include the value of utc_total_offset and a DST flag. When using DataSources::ZoneinfoDataSource, the std_offset will be derived from changes to the UTC total offset and the DST flag. As a consequence, utc_total_offset will always be correct, but std_offset may be inaccurate.

If you require std_offset to be accurate, install the tzinfo-data gem and set RubyDataSource as the DataSource.

# File lib/tzinfo/timezone_period.rb, line 71
def std_offset
  @offset.std_offset
end
to_local(utc) click to toggle source

Converts a UTC DateTime to local time based on the offset of this period.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 202
def to_local(utc)
  @offset.to_local(utc)
end
to_utc(local) click to toggle source

Converts a local DateTime to UTC based on the offset of this period.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 209
def to_utc(local)
  @offset.to_utc(local)
end
utc_after_start?(utc) click to toggle source

true if the given UTC DateTime is after the start of the period (inclusive); otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 163
def utc_after_start?(utc)
  !@start_transition || @start_transition.at <= utc
end
utc_before_end?(utc) click to toggle source

true if the given UTC DateTime is before the end of the period (exclusive); otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 171
def utc_before_end?(utc)
  !@end_transition || @end_transition.at > utc
end
utc_end() click to toggle source

The end time of the period in UTC as a DateTime. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 114
def utc_end
  @end_transition ? @end_transition.at.to_datetime : nil
end
utc_end_time() click to toggle source

The end time of the period in UTC as a Time. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 119
def utc_end_time
  @end_transition ? @end_transition.at.to_time : nil
end
utc_offset() click to toggle source

The base offset of the timezone from UTC in seconds. This does not include any adjustment made for daylight savings time and will typically remain constant throughout the year.

To obtain the currently observed offset from UTC, including the effect of daylight savings time, use utc_total_offset instead.

Note that zoneinfo files only include the value of utc_total_offset and a DST flag. When using ZoneinfoDataSource, the utc_offset will be derived from changes to the UTC total offset and the DST flag. As a consequence, utc_total_offset will always be correct, but utc_offset may be inaccurate.

If you require utc_offset to be accurate, install the tzinfo-data gem and set RubyDataSource as the DataSource.

# File lib/tzinfo/timezone_period.rb, line 55
def utc_offset
  @offset.utc_offset
end
utc_start() click to toggle source

The start time of the period in UTC as a DateTime. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 104
def utc_start
  @start_transition ? @start_transition.at.to_datetime : nil
end
utc_start_time() click to toggle source

The start time of the period in UTC as a Time. May be nil if unbounded.

# File lib/tzinfo/timezone_period.rb, line 109
def utc_start_time
  @start_transition ? @start_transition.at.to_time : nil
end
utc_total_offset() click to toggle source

Total offset from UTC (seconds). Equal to utc_offset + std_offset.

# File lib/tzinfo/timezone_period.rb, line 84
def utc_total_offset
  @offset.utc_total_offset
end
utc_total_offset_rational() click to toggle source

Total offset from UTC (days). Result is a Rational.

# File lib/tzinfo/timezone_period.rb, line 89
def utc_total_offset_rational
  # Thread-safety: It is possible that the value of
  # @utc_total_offset_rational may be calculated multiple times in
  # concurrently executing threads. It is not worth the overhead of locking
  # to ensure that @zone_identifiers is only calculated once.

  unless @utc_total_offset_rational
    result = OffsetRationals.rational_for_offset(utc_total_offset)
    return result if frozen?
    @utc_total_offset_rational = result
  end
  @utc_total_offset_rational
end
valid_for_local?(local) click to toggle source

true if this period is valid for the given local DateTime; otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 179
def valid_for_local?(local)      
  local_after_start?(local) && local_before_end?(local) 
end
valid_for_utc?(utc) click to toggle source

true if this period is valid for the given UTC DateTime; otherwise false.

Deprecation warning: this method will be removed in TZInfo version 2.0.0.

# File lib/tzinfo/timezone_period.rb, line 155
def valid_for_utc?(utc)
  utc_after_start?(utc) && utc_before_end?(utc) 
end
zone_identifier()
Alias for: abbreviation