Fix #6962. AS::TimeWithZone#strftime responds incorrectly to %:z and %::z format strings.

This commit is contained in:
kennyj 2012-09-20 00:51:28 +09:00
parent bf4c8fe694
commit 105cb3d9e3
2 changed files with 12 additions and 1 deletions

View File

@ -168,7 +168,10 @@ module ActiveSupport
# Replaces <tt>%Z</tt> and <tt>%z</tt> directives with +zone+ and +formatted_offset+, respectively, before passing to
# Time#strftime, so that zone information is correct
def strftime(format)
format = format.gsub('%Z', zone).gsub('%z', formatted_offset(false))
format = format.gsub('%Z', zone)
.gsub('%z', formatted_offset(false))
.gsub('%:z', formatted_offset(true))
.gsub('%::z', formatted_offset(true) + ":00")
time.strftime(format)
end

View File

@ -258,6 +258,14 @@ class TimeZoneTest < ActiveSupport::TestCase
assert_equal "-0500", zone.formatted_offset(false)
end
def test_z_format_strings
zone = ActiveSupport::TimeZone['Tokyo']
twz = zone.now
assert_equal '+0900', twz.strftime('%z')
assert_equal '+09:00', twz.strftime('%:z')
assert_equal '+09:00:00', twz.strftime('%::z')
end
def test_formatted_offset_zero
zone = ActiveSupport::TimeZone['London']
assert_equal "+00:00", zone.formatted_offset