提交 6e62e897 编写于 作者: P Prem Sichanugrist 提交者: José Valim

Fix bug that causes TimeZone.seconds_to_utc_offset to returns wrong offset...

Fix bug that causes TimeZone.seconds_to_utc_offset to returns wrong offset when hour < 0 and not in hundreds [#3741 status:resolved]
Signed-off-by: NJosé Valim <jose.valim@gmail.com>
上级 d2759d12
......@@ -172,7 +172,7 @@ class TimeZone
MAPPING.freeze
end
UTC_OFFSET_WITH_COLON = '%+03d:%02d'
UTC_OFFSET_WITH_COLON = '%s%02d:%02d'
UTC_OFFSET_WITHOUT_COLON = UTC_OFFSET_WITH_COLON.sub(':', '')
# Assumes self represents an offset from UTC in seconds (as returned from Time#utc_offset)
......@@ -181,9 +181,10 @@ class TimeZone
# TimeZone.seconds_to_utc_offset(-21_600) # => "-06:00"
def self.seconds_to_utc_offset(seconds, colon = true)
format = colon ? UTC_OFFSET_WITH_COLON : UTC_OFFSET_WITHOUT_COLON
hours = seconds / 3600
sign = (seconds < 0 ? '-' : '+')
hours = seconds.abs / 3600
minutes = (seconds.abs % 3600) / 60
format % [hours, minutes]
format % [sign, hours, minutes]
end
include Comparable
......
......@@ -208,6 +208,12 @@ def test_seconds_to_utc_offset_without_colon
assert_equal "+0000", ActiveSupport::TimeZone.seconds_to_utc_offset(0, false)
assert_equal "+0500", ActiveSupport::TimeZone.seconds_to_utc_offset(18_000, false)
end
def test_seconds_to_utc_offset_with_negative_offset
assert_equal "-01:00", ActiveSupport::TimeZone.seconds_to_utc_offset(-3_600)
assert_equal "-00:59", ActiveSupport::TimeZone.seconds_to_utc_offset(-3_599)
assert_equal "-05:30", ActiveSupport::TimeZone.seconds_to_utc_offset(-19_800)
end
def test_formatted_offset_positive
zone = ActiveSupport::TimeZone['Moscow']
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册