summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authortadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-12 03:04:50 +0000
committertadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-01-12 03:04:50 +0000
commit24d0a22505881423444227246e6f81faaba55298 (patch)
tree64aec86e276deefdad2d12360575146dc636aceb /lib
parentc91cd71a75556cc80da8c92d103ecb117f63ca1d (diff)
* lib/date.rb, lib/date/format.rb: tuning for performance.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15002 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r--lib/date.rb23
-rw-r--r--lib/date/format.rb8
2 files changed, 20 insertions, 11 deletions
diff --git a/lib/date.rb b/lib/date.rb
index bc75b198af..2ccc311f42 100644
--- a/lib/date.rb
+++ b/lib/date.rb
@@ -6,7 +6,7 @@
# Documentation: William Webber <william@williamwebber.com>
#
#--
-# $Id: date.rb,v 2.35 2008-01-06 08:42:17+09 tadf Exp $
+# $Id: date.rb,v 2.36 2008-01-12 10:54:29+09 tadf Exp $
#++
#
# == Overview
@@ -505,9 +505,9 @@ class Date
# Convert a fractional day +fr+ to [hours, minutes, seconds,
# fraction_of_a_second]
def self.day_fraction_to_time(fr)
- h, fr = fr.divmod(HOURS_IN_DAY)
- min, fr = fr.divmod(MINUTES_IN_DAY)
- s, fr = fr.divmod(SECONDS_IN_DAY)
+ ss, fr = fr.divmod(SECONDS_IN_DAY) # 4p
+ h, ss = ss.divmod(3600)
+ min, s = ss.divmod(60)
return h, min, s, fr
end
@@ -517,11 +517,15 @@ class Date
Rational(Rational(1, 2), 2) # a challenge
def self.time_to_day_fraction(h, min, s)
- Rational(h, 24) + Rational(min, 1440) + Rational(s, 86400)
+ Rational(h * 3600 + min * 60 + s, 86400) # 4p
end
rescue
def self.time_to_day_fraction(h, min, s)
- h.to_r/24 + min.to_r/1440 + s.to_r/86400
+ if Integer === h && Integer === min && Integer === s
+ Rational(h * 3600 + min * 60 + s, 86400) # 4p
+ else
+ h.to_r/24 + min.to_r/1440 + s.to_r/86400
+ end
end
end
@@ -1373,7 +1377,7 @@ class Date
# Return the date as a human-readable string.
#
# The format used is YYYY-MM-DD.
- def to_s() strftime end
+ def to_s() format('%.4d-%02d-%02d', year, mon, mday) end # 4p
# Dump to Marshal format.
def _dump(limit) Marshal.dump([@ajd, @of, @sg], -1) end
@@ -1617,6 +1621,11 @@ class DateTime < Date
public :hour, :min, :sec, :sec_fraction, :zone, :offset, :new_offset
# :minute, :second, :second_fraction
+ def to_s # 4p
+ format('%.4d-%02d-%02dT%02d:%02d:%02d%s',
+ year, mon, mday, hour, min, sec, zone)
+ end
+
end
class Time
diff --git a/lib/date/format.rb b/lib/date/format.rb
index db59cfa25f..22126e6f7c 100644
--- a/lib/date/format.rb
+++ b/lib/date/format.rb
@@ -1,5 +1,5 @@
# format.rb: Written by Tadayoshi Funaba 1999-2008
-# $Id: format.rb,v 2.41 2008-01-06 08:42:17+09 tadf Exp $
+# $Id: format.rb,v 2.42 2008-01-12 10:54:29+09 tadf Exp $
require 'rational'
@@ -297,9 +297,9 @@ class Date
t = $1.size
sign = if offset < 0 then -1 else +1 end
fr = offset.abs
- hh, fr = fr.divmod(HOURS_IN_DAY)
- mm, fr = fr.divmod(MINUTES_IN_DAY)
- ss, fr = fr.divmod(SECONDS_IN_DAY)
+ ss = fr.div(SECONDS_IN_DAY) # 4p
+ hh, ss = ss.divmod(3600)
+ mm, ss = ss.divmod(60)
if t == 3
if ss.nonzero? then t = 2
elsif mm.nonzero? then t = 1