mirror of https://github.com/rails/rails
Merge pull request #20600 from mtsmfm/xmlschema-should-display-more-than-6-digits
TimeWithZone#xmlschema should be able to display more than 6 digits
This commit is contained in:
commit
c80b114c45
|
@ -41,6 +41,9 @@ module ActiveSupport
|
|||
'Time'
|
||||
end
|
||||
|
||||
PRECISIONS = Hash.new { |h, n| h[n] = "%FT%T.%#{n}N".freeze }
|
||||
PRECISIONS[0] = '%FT%T'.freeze
|
||||
|
||||
include Comparable
|
||||
attr_reader :time_zone
|
||||
|
||||
|
@ -142,11 +145,7 @@ module ActiveSupport
|
|||
#
|
||||
# Time.zone.now.xmlschema # => "2014-12-04T11:02:37-05:00"
|
||||
def xmlschema(fraction_digits = 0)
|
||||
fraction = if fraction_digits.to_i > 0
|
||||
(".%06i" % time.usec)[0, fraction_digits.to_i + 1]
|
||||
end
|
||||
|
||||
"#{time.strftime("%Y-%m-%dT%H:%M:%S")}#{fraction}#{formatted_offset(true, 'Z')}"
|
||||
"#{time.strftime(PRECISIONS[fraction_digits.to_i])}#{formatted_offset(true, 'Z'.freeze)}"
|
||||
end
|
||||
alias_method :iso8601, :xmlschema
|
||||
|
||||
|
|
|
@ -110,14 +110,14 @@ class TimeWithZoneTest < ActiveSupport::TestCase
|
|||
@twz += 0.1234560001 # advance the time by a fraction of a second
|
||||
assert_equal "1999-12-31T19:00:00.123-05:00", @twz.xmlschema(3)
|
||||
assert_equal "1999-12-31T19:00:00.123456-05:00", @twz.xmlschema(6)
|
||||
assert_equal "1999-12-31T19:00:00.123456-05:00", @twz.xmlschema(12)
|
||||
assert_equal "1999-12-31T19:00:00.123456000100-05:00", @twz.xmlschema(12)
|
||||
end
|
||||
|
||||
def test_xmlschema_with_fractional_seconds_lower_than_hundred_thousand
|
||||
@twz += 0.001234 # advance the time by a fraction
|
||||
assert_equal "1999-12-31T19:00:00.001-05:00", @twz.xmlschema(3)
|
||||
assert_equal "1999-12-31T19:00:00.001234-05:00", @twz.xmlschema(6)
|
||||
assert_equal "1999-12-31T19:00:00.001234-05:00", @twz.xmlschema(12)
|
||||
assert_equal "1999-12-31T19:00:00.001234000000-05:00", @twz.xmlschema(12)
|
||||
end
|
||||
|
||||
def test_xmlschema_with_nil_fractional_seconds
|
||||
|
|
Loading…
Reference in New Issue