Class: ISO8601::Time
- Inherits:
-
Object
- Object
- ISO8601::Time
- Extended by:
- Forwardable
- Defined in:
- lib/iso8601/time.rb
Overview
A Time representation
Instance Attribute Summary collapse
-
#atoms ⇒ Object
readonly
The original atoms.
-
#second ⇒ Object
readonly
The second atom.
-
#separator ⇒ Object
readonly
The separator used in the original ISO 8601 string.
Instance Method Summary collapse
-
#+(other) ⇒ ISO8601::Time
Forwards the time the given amount of seconds.
-
#-(other) ⇒ ISO8601::Time
Backwards the date the given amount of seconds.
- #==(other) ⇒ Boolean
- #eql?(other) ⇒ Boolean
- #hash ⇒ Fixnum
-
#initialize(input, base = ::Date.today) ⇒ Time
constructor
A new instance of Time.
-
#to_a ⇒ Object
Converts self to an array of atoms.
-
#to_s ⇒ Object
Converts self to a time component representation.
Constructor Details
#initialize(input, base = ::Date.today) ⇒ Time
Returns a new instance of Time.
33 34 35 36 37 38 39 |
# File 'lib/iso8601/time.rb', line 33 def initialize(input, base = ::Date.today) @original = input @base = base @atoms = atomize(input) @time = compose(@atoms, @base) @second = @time.second + @time.second_fraction.to_f.round(1) end |
Instance Attribute Details
#atoms ⇒ Object (readonly)
The original atoms
28 29 30 |
# File 'lib/iso8601/time.rb', line 28 def atoms @atoms end |
#second ⇒ Object (readonly)
The second atom
25 26 27 |
# File 'lib/iso8601/time.rb', line 25 def second @second end |
#separator ⇒ Object (readonly)
The separator used in the original ISO 8601 string.
22 23 24 |
# File 'lib/iso8601/time.rb', line 22 def separator @separator end |
Instance Method Details
#+(other) ⇒ ISO8601::Time
Forwards the time the given amount of seconds.
65 66 67 68 69 70 |
# File 'lib/iso8601/time.rb', line 65 def +(other) moment = @time.to_time.localtime(zone) + other.to_f.round(1) base = ::Date.parse(moment.strftime('%Y-%m-%d')) self.class.new(moment.strftime('T%H:%M:%S.%L%:z'), base) end |
#-(other) ⇒ ISO8601::Time
Backwards the date the given amount of seconds.
77 78 79 80 81 82 |
# File 'lib/iso8601/time.rb', line 77 def -(other) moment = @time.to_time.localtime(zone) - other.to_f.round(1) base = ::Date.parse(moment.strftime('%Y-%m-%d')) self.class.new(moment.strftime('T%H:%M:%S.%L%:z'), base) end |
#==(other) ⇒ Boolean
44 45 46 |
# File 'lib/iso8601/time.rb', line 44 def ==(other) (hash == other.hash) end |
#eql?(other) ⇒ Boolean
51 52 53 |
# File 'lib/iso8601/time.rb', line 51 def eql?(other) (hash == other.hash) end |
#hash ⇒ Fixnum
56 57 58 |
# File 'lib/iso8601/time.rb', line 56 def hash [atoms, self.class].hash end |
#to_a ⇒ Object
Converts self to an array of atoms.
92 93 94 |
# File 'lib/iso8601/time.rb', line 92 def to_a [hour, minute, second, zone] end |
#to_s ⇒ Object
Converts self to a time component representation.
85 86 87 88 89 |
# File 'lib/iso8601/time.rb', line 85 def to_s second_format = (second % 1).zero? ? '%02d' % second : '%04.1f' % second "T%02d:%02d:#{second_format}#{zone}" % atoms end |