module Sequel::NamedTimezones

Attributes

tzinfo_disambiguator[RW]

Handles TZInfo::AmbiguousTime exceptions automatically by providing a proc called with both the datetime value being converted as well as the array of TZInfo::TimezonePeriod results. Example:

Sequel.tzinfo_disambiguator = proc{|datetime, periods| periods.first}

Private Instance Methods

convert_input_datetime_other(v, input_timezone) click to toggle source

Assume the given DateTime has a correct time but a wrong timezone. It is currently in UTC timezone, but it should be converted to the input_timezone. Keep the time the same but convert the timezone to the input_timezone. Expects the input_timezone to be a TZInfo::Timezone instance.

# File lib/sequel/extensions/named_timezones.rb, line 70
def convert_input_datetime_other(v, input_timezone)
  local_offset = input_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset_rational
  (v - local_offset).new_offset(local_offset)
end
convert_output_datetime_other(v, output_timezone) click to toggle source

Convert the given DateTime to use the given output_timezone. Expects the output_timezone to be a TZInfo::Timezone instance.

# File lib/sequel/extensions/named_timezones.rb, line 77
def convert_output_datetime_other(v, output_timezone)
  # TZInfo converts times, but expects the given DateTime to have an offset
  # of 0 and always leaves the timezone offset as 0
  v = output_timezone.utc_to_local(v.new_offset(0))
  local_offset = output_timezone.period_for_local(v, &tzinfo_disambiguator_for(v)).utc_total_offset_rational
  # Convert timezone offset from UTC to the offset for the output_timezone
  (v - local_offset).new_offset(local_offset)
end
convert_timezone_setter_arg(tz) click to toggle source

Returns TZInfo::Timezone instance if given a String.

Calls superclass method
# File lib/sequel/extensions/named_timezones.rb, line 87
def convert_timezone_setter_arg(tz)
  tz.is_a?(String) ? TZInfo::Timezone.get(tz) : super
end
tzinfo_disambiguator_for(v) click to toggle source

Return a disambiguation proc that provides both the datetime value and the periods, in order to allow the choice of period to depend on the datetime value.

# File lib/sequel/extensions/named_timezones.rb, line 94
def tzinfo_disambiguator_for(v)
  if pr = @tzinfo_disambiguator
    proc{|periods| pr.call(v, periods)}
  end
end