aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-21 17:11:27 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-04-21 17:11:27 +0000
commitfd9bfef325f037e5d3ae3551a11736ce52b5af9f (patch)
tree3e7fed039d48fa04588bc4da48e9f6953080f203
parent16dc9e04cbedff54c12235ae81121ce2f4acad1e (diff)
downloadruby-fd9bfef325f037e5d3ae3551a11736ce52b5af9f.tar.gz
* lib/time.rb (Time#xmlschema): use subsec instead of nsec.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23248 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--lib/time.rb4
-rw-r--r--test/test_time.rb12
3 files changed, 17 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 8f280db71f..407861ad81 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Apr 22 02:10:48 2009 Tanaka Akira <akr@fsij.org>
+
+ * lib/time.rb (Time#xmlschema): use subsec instead of nsec.
+
Wed Apr 22 01:27:38 2009 Tanaka Akira <akr@fsij.org>
* time.c (time_arg): use the year argument as-is. [ruby-dev:38194]
diff --git a/lib/time.rb b/lib/time.rb
index 8a4d1ab2a8..da5bec9ff3 100644
--- a/lib/time.rb
+++ b/lib/time.rb
@@ -502,10 +502,8 @@ class Time
year, mon, day, hour, min, sec) +
if fraction_digits == 0
''
- elsif fraction_digits <= 9
- '.' + sprintf('%09d', nsec)[0, fraction_digits]
else
- '.' + sprintf('%09d', nsec) + '0' * (fraction_digits - 9)
+ '.' + sprintf('%0*d', fraction_digits, (subsec * 10**fraction_digits).floor)
end +
if utc?
'Z'
diff --git a/test/test_time.rb b/test/test_time.rb
index 844dc62314..01c86d72e9 100644
--- a/test/test_time.rb
+++ b/test/test_time.rb
@@ -153,6 +153,18 @@ class TestTimeExtention < Test::Unit::TestCase # :nodoc:
assert_equal("2001-04-17T19:23:17.12345Z", t.xmlschema(5))
assert_equal("2001-04-17T19:23:17.1Z", t.xmlschema(1))
+ t = Time.at(2.quo(3))
+ assert_equal("1970-01-01T09:00:00.666+09:00", t.xmlschema(3))
+ assert_equal("1970-01-01T09:00:00.6666666666+09:00", t.xmlschema(10))
+ assert_equal("1970-01-01T09:00:00.66666666666666666666+09:00", t.xmlschema(20))
+
+ t = Time.at(123456789.quo(9999999999))
+ assert_equal("1970-01-01T09:00:00.012+09:00", t.xmlschema(3))
+ assert_equal("1970-01-01T09:00:00.012345678+09:00", t.xmlschema(9))
+ assert_equal("1970-01-01T09:00:00.0123456789+09:00", t.xmlschema(10))
+ assert_equal("1970-01-01T09:00:00.0123456789012345678+09:00", t.xmlschema(19))
+ assert_equal("1970-01-01T09:00:00.01234567890123456789+09:00", t.xmlschema(20))
+
begin
Time.at(-1)
rescue ArgumentError