mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/date.rb: some improvements for performance.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29846 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
bbbf9998c7
commit
c70988cbe9
2 changed files with 36 additions and 11 deletions
|
@ -1,3 +1,7 @@
|
|||
Mon Nov 22 01:48:58 2010 Tadayoshi Funaba <tadf@dotrb.org>
|
||||
|
||||
* lib/date.rb: some improvements for performance.
|
||||
|
||||
Sat Nov 20 07:45:50 2010 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* lib/mkmf.rb: adding compilation support for ObjC/ObjC++ extensions.
|
||||
|
|
43
lib/date.rb
43
lib/date.rb
|
@ -237,6 +237,7 @@ class Date
|
|||
xs.each{|x| x.freeze unless x.nil?}.freeze
|
||||
end
|
||||
|
||||
# now only for marshal dumped
|
||||
class Infinity < Numeric # :nodoc:
|
||||
|
||||
include Comparable
|
||||
|
@ -291,11 +292,11 @@ class Date
|
|||
|
||||
# A constant used to indicate that a Date should always use the
|
||||
# Julian calendar.
|
||||
JULIAN = Infinity.new
|
||||
JULIAN = Float::INFINITY
|
||||
|
||||
# A constant used to indicate that a Date should always use the
|
||||
# Gregorian calendar.
|
||||
GREGORIAN = -Infinity.new
|
||||
GREGORIAN = -Float::INFINITY
|
||||
|
||||
HALF_DAYS_IN_DAY = Rational(1, 2) # :nodoc:
|
||||
HOURS_IN_DAY = Rational(1, 24) # :nodoc:
|
||||
|
@ -506,6 +507,13 @@ class Date
|
|||
return h, min, s, fr * 86400
|
||||
end
|
||||
|
||||
def day_fraction_to_time_wo_sf(fr) # :nodoc:
|
||||
ss = fr.div(SECONDS_IN_DAY) # 4p
|
||||
h, ss = ss.divmod(3600)
|
||||
min, s = ss.divmod(60)
|
||||
return h, min, s
|
||||
end
|
||||
|
||||
# Convert an +h+ hour, +min+ minutes, +s+ seconds period
|
||||
# to a fractional day.
|
||||
begin
|
||||
|
@ -1133,11 +1141,15 @@ class Date
|
|||
|
||||
once :amjd
|
||||
|
||||
def daynum() ajd_to_jd(@ajd, @of) end
|
||||
|
||||
once :daynum
|
||||
|
||||
# Get the date as a Julian Day Number.
|
||||
def jd() ajd_to_jd(@ajd, @of)[0] end
|
||||
def jd() daynum[0] end
|
||||
|
||||
# Get any fractional day part of the date.
|
||||
def day_fraction() ajd_to_jd(@ajd, @of)[1] end
|
||||
def day_fraction() daynum[1] end
|
||||
|
||||
# Get the date as a Modified Julian Day Number.
|
||||
def mjd() jd_to_mjd(jd) end
|
||||
|
@ -1190,21 +1202,23 @@ class Date
|
|||
# Get the time of this date as [hours, minutes, seconds,
|
||||
# fraction_of_a_second]
|
||||
def time() day_fraction_to_time(day_fraction) end # :nodoc:
|
||||
def time_wo_sf() day_fraction_to_time_wo_sf(day_fraction) end # :nodoc:
|
||||
def time_sf() day_fraction % SECONDS_IN_DAY * 86400 end # :nodoc:
|
||||
|
||||
once :time
|
||||
private :time
|
||||
once :time, :time_wo_sf, :time_sf
|
||||
private :time, :time_wo_sf, :time_sf
|
||||
|
||||
# Get the hour of this date.
|
||||
def hour() time[0] end
|
||||
def hour() time_wo_sf[0] end # 4p
|
||||
|
||||
# Get the minute of this date.
|
||||
def min() time[1] end
|
||||
def min() time_wo_sf[1] end # 4p
|
||||
|
||||
# Get the second of this date.
|
||||
def sec() time[2] end
|
||||
def sec() time_wo_sf[2] end # 4p
|
||||
|
||||
# Get the fraction-of-a-second of this date.
|
||||
def sec_fraction() time[3] end
|
||||
def sec_fraction() time_sf end # 4p
|
||||
|
||||
alias_method :minute, :min
|
||||
alias_method :second, :sec
|
||||
|
@ -1213,7 +1227,14 @@ class Date
|
|||
private :hour, :min, :sec, :sec_fraction,
|
||||
:minute, :second, :second_fraction
|
||||
|
||||
def zone() strftime('%:z') end
|
||||
def zone # 4p - strftime('%:z')
|
||||
sign = if offset < 0 then '-' else '+' end
|
||||
fr = offset.abs
|
||||
ss = fr.div(SECONDS_IN_DAY)
|
||||
hh, ss = ss.divmod(3600)
|
||||
mm = ss.div(60)
|
||||
format('%s%02d:%02d', sign, hh, mm)
|
||||
end
|
||||
|
||||
private :zone
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue