File: //usr/local/rvm/gems/ruby-2.6.8/gems/tzinfo-2.0.4/lib/tzinfo/timezone_offset.rb
# encoding: UTF-8
# frozen_string_literal: true
module TZInfo
# Represents an offset from UTC observed by a time zone.
class TimezoneOffset
# Returns the base offset from UTC in seconds (`observed_utc_offset -
# std_offset`). 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 {observed_utc_offset} instead.
#
# If you require accurate {base_utc_offset} values, you should install the
# tzinfo-data gem and set {DataSources::RubyDataSource} as the {DataSource}.
# When using {DataSources::ZoneinfoDataSource}, the value of
# {base_utc_offset} has to be derived from changes to the observed UTC
# offset and DST status since it is not included in zoneinfo files.
#
# @return [Integer] the base offset from UTC in seconds.
attr_reader :base_utc_offset
alias utc_offset base_utc_offset
# Returns the offset from the time zone's standard time in seconds
# (`observed_utc_offset - base_utc_offset`). Zero when daylight savings time
# is not in effect. Non-zero (usually 3600 = 1 hour) if daylight savings is
# being observed.
#
# If you require accurate {std_offset} values, you should install the
# tzinfo-data gem and set {DataSources::RubyDataSource} as the {DataSource}.
# When using {DataSources::ZoneinfoDataSource}, the value of {std_offset}
# has to be derived from changes to the observed UTC offset and DST status
# since it is not included in zoneinfo files.
#
# @return [Integer] the offset from the time zone's standard time in
# seconds.
attr_reader :std_offset
# Returns the observed offset from UTC in seconds (`base_utc_offset +
# std_offset`). This includes adjustments made for daylight savings time.
#
# @return [Integer] the observed offset from UTC in seconds.
attr_reader :observed_utc_offset
alias utc_total_offset observed_utc_offset
# The abbreviation that identifies this offset. For example GMT
# (Greenwich Mean Time) or BST (British Summer Time) for Europe/London.
#
# @return [String] the abbreviation that identifies this offset.
attr_reader :abbreviation
alias abbr abbreviation
# Initializes a new {TimezoneOffset}.
#
# {TimezoneOffset} instances should not normally be constructed manually.
#
# The passed in `abbreviation` instance will be frozen.
#
# @param base_utc_offset [Integer] the base offset from UTC in seconds.
# @param std_offset [Integer] the offset from standard time in seconds.
# @param abbreviation [String] the abbreviation identifying the offset.
def initialize(base_utc_offset, std_offset, abbreviation)
@base_utc_offset = base_utc_offset
@std_offset = std_offset
@abbreviation = abbreviation.freeze
@observed_utc_offset = @base_utc_offset + @std_offset
end
# Determines if daylight savings is in effect (i.e. if {std_offset} is
# non-zero).
#
# @return [Boolean] `true` if {std_offset} is non-zero, otherwise `false`.
def dst?
@std_offset != 0
end
# Determines if this {TimezoneOffset} is equal to another instance.
#
# @param toi [Object] the instance to test for equality.
# @return [Boolean] `true` if `toi` is a {TimezoneOffset} with the same
# {utc_offset}, {std_offset} and {abbreviation} as this {TimezoneOffset},
# otherwise `false`.
def ==(toi)
toi.kind_of?(TimezoneOffset) &&
base_utc_offset == toi.base_utc_offset && std_offset == toi.std_offset && abbreviation == toi.abbreviation
end
# Determines if this {TimezoneOffset} is equal to another instance.
#
# @param toi [Object] the instance to test for equality.
# @return [Boolean] `true` if `toi` is a {TimezoneOffset} with the same
# {utc_offset}, {std_offset} and {abbreviation} as this {TimezoneOffset},
# otherwise `false`.
def eql?(toi)
self == toi
end
# @return [Integer] a hash based on {utc_offset}, {std_offset} and
# {abbreviation}.
def hash
[@base_utc_offset, @std_offset, @abbreviation].hash
end
# @return [String] the internal object state as a programmer-readable
# `String`.
def inspect
"#<#{self.class}: @base_utc_offset=#{@base_utc_offset}, @std_offset=#{@std_offset}, @abbreviation=#{@abbreviation}>"
end
end
end