Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

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

Merged
merged 1 commit into from

3 participants

@kennyj
Collaborator

Please see #6962.

AS::TWZ#strftime's behavior isn't equals to Time#strftime.
It seems %:z and %::z format are ignored.

@rafaelfranca

@kennyj great. Could you add a CHANGELOG entry?

@pastafari

@kennyj thanks for the fix. i was planning to do something similar, but felt it was a little brittle wrt changes to the time format string in future versions of Ruby.

@kennyj
Collaborator

@rafaelfranca I'll submit PR to 3-2-stable soon, because this is bug, and I'm going to add a CHANGELOG entry to 3-2-stable.
Thus I want to be merged this PR as it is.

@rafaelfranca rafaelfranca merged commit 883fa8f into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 19, 2012
  1. @kennyj
This page is out of date. Refresh to see the latest.
View
5 activesupport/lib/active_support/time_with_zone.rb
@@ -168,7 +168,10 @@ def to_s(format = :default)
# 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
8 activesupport/test/time_zone_test.rb
@@ -258,6 +258,14 @@ def test_formatted_offset_negative
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
Something went wrong with that request. Please try again.