diff options
Diffstat (limited to 'spec/ruby/core/time/fixtures/classes.rb')
| -rw-r--r-- | spec/ruby/core/time/fixtures/classes.rb | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/spec/ruby/core/time/fixtures/classes.rb b/spec/ruby/core/time/fixtures/classes.rb index ece7ed2bca..21c4e1effb 100644 --- a/spec/ruby/core/time/fixtures/classes.rb +++ b/spec/ruby/core/time/fixtures/classes.rb @@ -55,31 +55,51 @@ module TimeSpecs end end - class TimezoneWithAbbr < Timezone + Z = Struct.new(:offset, :abbr) + Zone = Struct.new(:std, :dst, :dst_range) + Zones = { + "Asia/Colombo" => Zone[Z[5*3600+30*60, "MMT"], nil, nil], + "PST" => Zone[Z[(-9*60*60), "PST"], nil, nil], + } + + class TimezoneWithName < Timezone + attr_reader :name + def initialize(options) - super - @abbr = options[:abbr] + @name = options[:name] + @std, @dst, @dst_range = *Zones[@name] end - def abbr(time) - @abbr + def dst?(t) + @dst_range&.cover?(t.mon) end - end - class TimezoneWithName < Timezone - def initialize(options) - super - @name = options[:name] + def zone(t) + (dst?(t) ? @dst : @std) end - def name - @name + def utc_offset(t) + zone(t)&.offset || 0 + end + + def abbr(t) + zone(t)&.abbr + end + + def local_to_utc(t) + t - utc_offset(t) + end + + def utc_to_local(t) + t + utc_offset(t) end end class TimeWithFindTimezone < Time def self.find_timezone(name) - TimezoneWithName.new(name: name.to_s, offset: -10*60*60) + TimezoneWithName.new(name: name.to_s) end end + + TimezoneWithAbbr = TimezoneWithName end |
