Class: Timing::TimeInZone

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/timing/time_in_zone.rb

Constant Summary collapse

REGEXP =
/[+-]\d\d:?\d\d/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(time, zone_offset = nil) ⇒ TimeInZone

Returns a new instance of TimeInZone.



13
14
15
16
# 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

Instance Attribute Details

#zone_offsetObject Also known as: utc_offset, gmt_offset, gmtoff

Returns the value of attribute zone_offset.



11
12
13
# File 'lib/timing/time_in_zone.rb', line 11

def zone_offset
  @zone_offset
end

Class Method Details

.at(seconds, zone_offset = nil) ⇒ Object



108
109
110
# File 'lib/timing/time_in_zone.rb', line 108

def self.at(seconds, zone_offset=nil)
  new Time.at(seconds), zone_offset
end

.now(zone_offset = nil) ⇒ Object



104
105
106
# File 'lib/timing/time_in_zone.rb', line 104

def self.now(zone_offset=nil)
  new Time.now, zone_offset
end

.parse(text) ⇒ Object



112
113
114
115
116
# File 'lib/timing/time_in_zone.rb', line 112

def self.parse(text)
  match = REGEXP.match text
  zone_offset = match ? match.to_s : nil
  new Time.parse(text), zone_offset
end

Instance Method Details

#+(seconds) ⇒ Object

Raises:

  • (ArgumentError)


26
27
28
29
# 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) ⇒ Object

Raises:

  • (ArgumentError)


31
32
33
34
35
# 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) ⇒ Object



68
69
70
# File 'lib/timing/time_in_zone.rb', line 68

def as_json(*args)
  iso8601
end

#iso8601Object



64
65
66
# File 'lib/timing/time_in_zone.rb', line 64

def iso8601
  strftime "%FT%T#{zone_offset.iso8601}"
end

#months_after(count) ⇒ Object



92
93
94
# File 'lib/timing/time_in_zone.rb', line 92

def months_after(count)
  Timing.months_after self, count
end

#months_ago(count) ⇒ Object



88
89
90
# File 'lib/timing/time_in_zone.rb', line 88

def months_ago(count)
  Timing.months_ago self, count
end

#strftime(format) ⇒ Object



60
61
62
# File 'lib/timing/time_in_zone.rb', line 60

def strftime(format)
  time_with_offset.strftime format.gsub('%Z', '').gsub('%z', zone_offset.to_s)
end

#to_json(*args) ⇒ Object



72
73
74
# File 'lib/timing/time_in_zone.rb', line 72

def to_json(*args)
  "\"#{as_json(*args)}\""
end

#to_sObject Also known as: inspect



55
56
57
# File 'lib/timing/time_in_zone.rb', line 55

def to_s
  strftime '%F %T %z'
end

#to_timeObject



51
52
53
# File 'lib/timing/time_in_zone.rb', line 51

def to_time
  time
end

#to_utcObject Also known as: getutc



42
43
44
# File 'lib/timing/time_in_zone.rb', line 42

def to_utc
  self.class.new time, 0
end

#to_zone(zone_offset) ⇒ Object



47
48
49
# File 'lib/timing/time_in_zone.rb', line 47

def to_zone(zone_offset)
  self.class.new time, zone_offset
end

#utc?Boolean Also known as: gmt?

Returns:

  • (Boolean)


37
38
39
# File 'lib/timing/time_in_zone.rb', line 37

def utc?
  zone_offset == 0
end

#years_after(count) ⇒ Object



100
101
102
# File 'lib/timing/time_in_zone.rb', line 100

def years_after(count)
  Timing.years_after self, count
end

#years_ago(count) ⇒ Object



96
97
98
# File 'lib/timing/time_in_zone.rb', line 96

def years_ago(count)
  Timing.years_ago self, count
end