class NumRu::Units::TimeNode
Attributes
date[R]
time[R]
zone[R]
Public Class Methods
new(date, time, zone)
click to toggle source
# File lib/numru/units.rb, line 2293 def initialize(date, time, zone) @date, @time, @zone = date, time, zone if :now === @date then now = Time.now.utc @date = XDate.new(now.year, now.month, now.day) @time = ((now.hour * 60 + now.min) * 60 + Float(now.sec)) else qdays = (@time / 86400).floor if not qdays.zero? @date += qdays @time -= (qdays * 86400) end end raise TypeError unless XDate === @date @time = 0.0 unless @time raise TypeError unless Float === @time @zone = 0 unless @zone raise TypeError unless Integer === @zone end
pentad(d)
click to toggle source
# File lib/numru/units.rb, line 2327 def self::pentad(d) (d > 25) ? 5 : ((d - 1) / 5) end
Public Instance Methods
add_time(increment)
click to toggle source
# File lib/numru/units.rb, line 2331 def add_time(increment) inc = increment.reduce5 case inc.name when 's' t2 = @time + inc.factor d2 = @date + (t2 / 86400) t2 = t2 % 86400 self.class.new(d2, t2, @zone) when 'pentad' ifac = Integer(inc.factor) ipen = ifac % 6 imon = ifac / 6 spen = self.class.pentad(@date.day) smon = @date.month + imon + spen / 6 spen = spen % 6 sday = spen * 5 + (@date.day - 1) % 5 + 1 syear = @date.year + (smon - 1) / 12 smon = (smon - 1) % 12 + 1 sdate = XDate.new(syear, smon, sday) self.class.new(sdate, @time, @zone) else raise "bad time unit '#{inc.name}'" end end
div_time(units)
click to toggle source
# File lib/numru/units.rb, line 2360 def div_time(units) base = units.ref inc = units.deref.reduce5 begin incname = inc.name rescue Exception incname = "(undefined)" end case incname when 's' dif = (@date - base.date) * 86400 + (utcsod - base.utcsod) dif / inc.factor when 'pentad' dif = (@date.year - base.date.year) * 72 dif += (@date.month - base.date.month) * 6 dif += self.class.pentad(@date.day) dif -= self.class.pentad(base.date.day) dif = Float(dif) if dif % inc.factor != 0 dif / inc.factor else raise "bad time unit '#{incname}'" end end
to_s()
click to toggle source
# File lib/numru/units.rb, line 2315 def to_s hr = @time.floor / 3600 mi = (@time.floor / 60) % 60 sc = @time % 60 tzm = @zone.abs tzh = tzm / 60 tzm = 60 tzh = -tzh if @zone < 0 format("%sT%02d:%02d:%05.2f %+03d:%02d", @date.to_s, hr, mi, sc, tzh, tzm) end
utcsod()
click to toggle source
# File lib/numru/units.rb, line 2356 def utcsod @time - @zone * 60 end