Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more
Object
# File date/delta.rb, line 111 def self.delta_to_dhms(delta) fr = delta.imag.abs y, fr = fr.divmod(12) m, fr = fr.divmod(1) if delta.imag < 0 y = -y m = -m end fr = delta.real.abs ss, fr = fr.divmod(SECONDS_IN_DAY) # 4p d, ss = ss.divmod(86400) h, ss = ss.divmod(3600) min, s = ss.divmod(60) if delta.real < 0 d = -d h = -h min = -min s = -s end return y, m, d, h, min, s, fr end
# File date/delta.rb, line 137 def self.dhms_to_delta(y, m, d, h, min, s, fr) fr = 0 if fr == 0 Complex(0, y.to_i * 12 + m.to_i) + Rational(d * 86400 + h * 3600 + min * 60 + (s + fr), 86400) # 4p end
# File date/delta.rb, line 185 def self.diff(d1, d2) new(d1.ajd - d2.ajd) end
# File date/delta.rb, line 143 def initialize(delta) @delta = delta @__ca__ = {} end
# File date/delta.rb, line 150 def self.new(arg=0, h=0, min=0, s=0) if Hash === arg d = Complex(0) arg.each do |k, v| k = k.to_s.downcase unless UNITS4KEY[k] raise ArgumentError, "unknown keyword #{k}" end d += v * UNITS4KEY[k] end else d = dhms_to_delta(0, 0, arg, h, min, s, 0) end new!(d) end
# File date/delta.rb, line 317 def <=> (other) if @delta.imag != 0 raise ArgumentError, "<=>: #{self} has month" end case other when Numeric; return @delta.real <=> other when Delta; return @delta.real <=> other.delta.real else begin l, r = other.coerce(self) return l <=> r rescue NoMethodError end end nil end
# File date/delta.rb, line 334 def == (other) case other when Numeric; return @delta == other when Delta; return @delta == other else begin l, r = other.coerce(self) return l == r rescue NoMethodError end end nil end
# File date/delta.rb, line 348 def coerce(other) case other when Numeric; return other, @delta else super end end
# File date/delta.rb, line 205 def dhms() self.class.delta_to_dhms(@delta) end
# File date/delta.rb, line 296 def divmod(n) [div(n), modulo(n)] end
# File date/delta.rb, line 356 def eql? (other) Delta === other && self == other end
# File date/delta.rb, line 382 def inspect() format('#<%s: %s (%s)>', self.class, to_s, @delta) end
# File date/delta.rb, line 242 def integer? () @delta.imag == 0 && @delta.real.integer? end
# File date/delta.rb, line 394 def marshal_load(a) @delta = a @__ca__ = {} end
# File date/delta.rb, line 217 def minutes() dhms[4] end
# File date/delta.rb, line 295 def modulo(n) dx_conv1(:modulo, n) end
# File date/delta.rb, line 240 def nonzero?() unless zero? then self end end
# File date/delta.rb, line 298 def quotient(n) if @delta.imag != 0 raise ArgumentError, "quotient: #{self} has month" end case n when Numeric return self.class.new!(Complex((@delta.real / n).truncate)) else l, r = n.coerce(self) return l.__send__(m, r) end end
# File date/delta.rb, line 312 def quotrem(n) [quotient(n), remainder(n)] end
# File date/delta.rb, line 311 def remainder(n) dx_conv1(:remainder, n) end
# File date/delta.rb, line 219 def second_fractions() dhms[6] end
# File date/delta.rb, line 218 def seconds() dhms[5] end
# File date/delta.rb, line 375 def to_i() dx_conv0(:to_i) end
# File date/delta.rb, line 384 def to_s format(%(%s(%dd %.02d:%02d'%02d"%03d)%s(%dy %dm)), # ' if @delta.real < 0 then '-' else '+' end, days.abs, hours.abs, mins.abs, secs.abs, sec_fractions.abs * 1000, if @delta.imag < 0 then '-' else '+' end, years.abs, months.abs) end