Permalink
Browse files

Return local time for backwards compatibility

  • Loading branch information...
1 parent 3f97aab commit cd6c2357a8694d0129285a5eb38d99ccdd6e6128 @pixeltrix pixeltrix committed Jul 9, 2013
View
2 activesupport/CHANGELOG.md
@@ -1,6 +1,6 @@
## unreleased ##
-* Make `Time.at_with_coercion` retain the second fraction and offset from UTC.
+* Make `Time.at_with_coercion` retain the second fraction and return local time.
Fixes #11350
View
2 activesupport/lib/active_support/core_ext/time/calculations.rb
@@ -75,7 +75,7 @@ def at_with_coercion(*args)
time_or_number = args.first
if time_or_number.is_a?(ActiveSupport::TimeWithZone) || time_or_number.is_a?(DateTime)
- at_without_coercion(time_or_number.to_f).getlocal(time_or_number.utc_offset)
+ at_without_coercion(time_or_number.to_f).getlocal
else
at_without_coercion(time_or_number)
end
View
33 activesupport/test/core_ext/time_ext_test.rb
@@ -752,9 +752,18 @@ def test_at_with_datetime
end
end
- def test_at_with_datetime_maintains_offset
+ def test_at_with_datetime_returns_local_time
with_env_tz 'US/Eastern' do
- assert_equal 3600, Time.at(DateTime.civil(2000, 1, 1, 0, 0, 0, '+1')).utc_offset
+ dt = DateTime.civil(2000, 1, 1, 0, 0, 0, '+0')
+ assert_equal Time.local(1999, 12, 31, 19, 0, 0), Time.at(dt)
+ assert_equal 'EST', Time.at(dt).zone
+ assert_equal(-18000, Time.at(dt).utc_offset)
+
+ # Daylight savings
+ dt = DateTime.civil(2000, 7, 1, 1, 0, 0, '+1')
+ assert_equal Time.local(2000, 6, 30, 20, 0, 0), Time.at(dt)
+ assert_equal 'EDT', Time.at(dt).zone
+ assert_equal(-14400, Time.at(dt).utc_offset)
end
end
@@ -769,10 +778,18 @@ def test_at_with_time_with_zone
end
end
- def test_at_with_time_with_zone_maintains_offset
+ def test_at_with_time_with_zone_returns_local_time
with_env_tz 'US/Eastern' do
- assert_equal 0, Time.at(ActiveSupport::TimeWithZone.new(Time.utc(2000, 1, 1, 0, 0, 0), ActiveSupport::TimeZone['London'])).utc_offset
- assert_equal 3600, Time.at(ActiveSupport::TimeWithZone.new(Time.utc(2000, 7, 1, 0, 0, 0), ActiveSupport::TimeZone['London'])).utc_offset
+ twz = ActiveSupport::TimeWithZone.new(Time.utc(2000, 1, 1, 0, 0, 0), ActiveSupport::TimeZone['London'])
+ assert_equal Time.local(1999, 12, 31, 19, 0, 0), Time.at(twz)
+ assert_equal 'EST', Time.at(twz).zone
+ assert_equal(-18000, Time.at(twz).utc_offset)
+
+ # Daylight savings
+ twz = ActiveSupport::TimeWithZone.new(Time.utc(2000, 7, 1, 0, 0, 0), ActiveSupport::TimeZone['London'])
+ assert_equal Time.local(2000, 6, 30, 20, 0, 0), Time.at(twz)
+ assert_equal 'EDT', Time.at(twz).zone
+ assert_equal(-14400, Time.at(twz).utc_offset)
end
end
@@ -783,20 +800,20 @@ def test_at_with_time_microsecond_precision
def test_at_with_utc_time
with_env_tz 'US/Eastern' do
assert_equal Time.utc(2000), Time.at(Time.utc(2000))
- assert_equal 0, Time.at(Time.utc(2000)).utc_offset
assert_equal 'UTC', Time.at(Time.utc(2000)).zone
+ assert_equal(0, Time.at(Time.utc(2000)).utc_offset)
end
end
def test_at_with_local_time
with_env_tz 'US/Eastern' do
assert_equal Time.local(2000), Time.at(Time.local(2000))
- assert_equal -18000, Time.at(Time.local(2000)).utc_offset
assert_equal 'EST', Time.at(Time.local(2000)).zone
+ assert_equal(-18000, Time.at(Time.local(2000)).utc_offset)
assert_equal Time.local(2000, 7, 1), Time.at(Time.local(2000, 7, 1))
- assert_equal -14400, Time.at(Time.local(2000, 7, 1)).utc_offset
assert_equal 'EDT', Time.at(Time.local(2000, 7, 1)).zone
+ assert_equal(-14400, Time.at(Time.local(2000, 7, 1)).utc_offset)
end
end

0 comments on commit cd6c235

Please sign in to comment.