class Timing::TimeInZone

Constants

REGEXP

Attributes

gmt_offset[R]
gmtoff[R]
time[R]
utc_offset[R]
zone_offset[R]

Public Class Methods

at(seconds, zone_offset=nil) click to toggle source
# File lib/timing/time_in_zone.rb, line 116
def self.at(seconds, zone_offset=nil)
  new Time.at(seconds), zone_offset
end
new(time, zone_offset=nil) click to toggle source
# File lib/timing/time_in_zone.rb, line 13
def initialize(time, zone_offset=nil)
  @time = time
  @zone_offset = build_zone_offset(zone_offset || time.utc_offset)
end
now(zone_offset=nil) click to toggle source
# File lib/timing/time_in_zone.rb, line 112
def self.now(zone_offset=nil)
  new Time.now, zone_offset
end
parse(text) click to toggle source
# File lib/timing/time_in_zone.rb, line 120
def self.parse(text)
  match = text.length > 10 ? REGEXP.match(text) : nil
  zone_offset = match ? match.to_s : nil
  new Time.parse(text), zone_offset
end

Public Instance Methods

+(seconds) click to toggle source
# File lib/timing/time_in_zone.rb, line 26
def +(seconds)
  raise ArgumentError, "#{seconds} must be a valid seconds count" unless seconds.is_a? Numeric
  self.class.new (time + seconds), zone_offset
end
-(seconds) click to toggle source
# File lib/timing/time_in_zone.rb, line 31
def -(seconds)
  raise ArgumentError, "#{seconds} must be a time or a valid seconds count" unless seconds.respond_to? :to_f
  result = self.class.at (time.to_f - seconds.to_f), zone_offset
  seconds.is_a?(Numeric) ? result : result.to_f
end
as_json(*args) click to toggle source
# File lib/timing/time_in_zone.rb, line 76
def as_json(*args)
  iso8601
end
getutc()
Alias for: to_utc
gmt?()
Alias for: utc?
inspect()
Alias for: to_s
iso8601() click to toggle source
# File lib/timing/time_in_zone.rb, line 72
def iso8601
  strftime "%FT%T#{zone_offset.iso8601}"
end
months_after(count) click to toggle source
# File lib/timing/time_in_zone.rb, line 100
def months_after(count)
  Timing.months_after self, count
end
months_ago(count) click to toggle source
# File lib/timing/time_in_zone.rb, line 96
def months_ago(count)
  Timing.months_ago self, count
end
strftime(format) click to toggle source
# File lib/timing/time_in_zone.rb, line 63
def strftime(format)
  sanitized_format = format.gsub('%Z', '')
                           .gsub('%z', zone_offset.to_s)
                           .gsub('%:z', zone_offset.to_s(':'))
                           .gsub('%::z', "#{zone_offset.to_s(':')}:00")

  time_with_offset.strftime sanitized_format
end
to_json(*args) click to toggle source
# File lib/timing/time_in_zone.rb, line 80
def to_json(*args)
  "\"#{as_json(*args)}\""
end
to_s() click to toggle source
# File lib/timing/time_in_zone.rb, line 58
def to_s
  strftime '%F %T %z'
end
Also aliased as: inspect
to_time() click to toggle source
# File lib/timing/time_in_zone.rb, line 54
def to_time
  time
end
to_utc() click to toggle source
# File lib/timing/time_in_zone.rb, line 44
def to_utc
  self.class.new time, 0
end
Also aliased as: getutc, utc
to_zone(zone_offset) click to toggle source
# File lib/timing/time_in_zone.rb, line 50
def to_zone(zone_offset)
  self.class.new time, zone_offset
end
utc()
Alias for: to_utc
utc?() click to toggle source
# File lib/timing/time_in_zone.rb, line 39
def utc?
  zone_offset == 0
end
Also aliased as: gmt?
years_after(count) click to toggle source
# File lib/timing/time_in_zone.rb, line 108
def years_after(count)
  Timing.years_after self, count
end
years_ago(count) click to toggle source
# File lib/timing/time_in_zone.rb, line 104
def years_ago(count)
  Timing.years_ago self, count
end
zone_offset=(zone_offset) click to toggle source
# File lib/timing/time_in_zone.rb, line 18
def zone_offset=(zone_offset)
  @zone_offset = build_zone_offset zone_offset
end

Private Instance Methods

build_zone_offset(zone_offset) click to toggle source
# File lib/timing/time_in_zone.rb, line 130
def build_zone_offset(zone_offset)
  case zone_offset
    when ZoneOffset then zone_offset
    when Numeric then ZoneOffset.new(zone_offset)
    else ZoneOffset.parse(zone_offset)
  end
end
method_missing(method, *args, &block) click to toggle source
# File lib/timing/time_in_zone.rb, line 142
def method_missing(method, *args, &block)
  time.public_send method, *args, &block
end
respond_to_missing?(method, include_private=false) click to toggle source
Calls superclass method
# File lib/timing/time_in_zone.rb, line 146
def respond_to_missing?(method, include_private=false)
  super || time.respond_to?(method)
end
time_with_offset() click to toggle source
# File lib/timing/time_in_zone.rb, line 138
def time_with_offset
  time.getutc + zone_offset
end