Sha256: eee99dce9ae2774e1cf53c917c461379d607ccce453f87e4bf6641f9ee312d20
Contents?: true
Size: 1.02 KB
Versions: 2
Compression:
Stored size: 1.02 KB
Contents
module Timing class ZoneOffset < TransparentProxy REGEXP = /^([+-]?)(\d\d):?(\d\d)$/ def initialize(seconds) raise ArgumentError, "#{seconds} is not a number" unless seconds.is_a? Numeric super end def to_s "#{sign}#{hour.to_s.rjust(2, '0')}#{minute.to_s.rjust(2, '0')}" end def iso8601 "#{sign}#{hour.to_s.rjust(2, '0')}:#{minute.to_s.rjust(2, '0')}" end def inspect "#{to_s} (#{to_f})" end def self.parse(expression) match = REGEXP.match expression.strip raise ArgumentError, "Invalid time zone offset #{expression}" unless match sign = match.captures[0] == '-' ? -1 : 1 hours = match.captures[1].to_i minutes = match.captures[2].to_i new (Interval.hours(hours) + Interval.minutes(minutes)) * sign end private def hour Interval.new(to_f).to_hours.to_i end def minute Interval.new(to_f % Interval.hours(1)).to_minutes.to_i end def sign self < 0 ? '-' : '+' end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
timing-0.0.5 | lib/timing/zone_offset.rb |
timing-0.0.4 | lib/timing/zone_offset.rb |