From 224d82ee5990b101b7a44c37bed026b602bd4f20 Mon Sep 17 00:00:00 2001 From: Andrew White Date: Tue, 11 Dec 2012 07:06:34 +0000 Subject: Deprecate Date#to_time_in_current_zone The to_time_in_current_zone method doesn't match the naming of the methods for converting to ActiveSupport::TimeWithZone on Time and DateTime. Since DateTime inherits from Date that has led to confusion with some users using the to_time_in_current_zone method with DateTime instances and having the time part dropped and the UTC offset lost. This commit fixes this by deprecating the old method and adding a new in_time_zone method which matches the naming for DateTime and Time. This should prevent accidently dropping times and UTC offsets when converting DateTime instances to ActiveSupport::TimeWithZone. --- .../lib/active_support/core_ext/date/zones.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'activesupport/lib/active_support/core_ext/date/zones.rb') diff --git a/activesupport/lib/active_support/core_ext/date/zones.rb b/activesupport/lib/active_support/core_ext/date/zones.rb index c1b3934722..b4548671bf 100644 --- a/activesupport/lib/active_support/core_ext/date/zones.rb +++ b/activesupport/lib/active_support/core_ext/date/zones.rb @@ -2,14 +2,36 @@ require 'date' require 'active_support/core_ext/time/zones' class Date + # *DEPRECATED*: Use +Date#in_time_zone+ instead. + # # Converts Date to a TimeWithZone in the current zone if Time.zone or # Time.zone_default is set, otherwise converts Date to a Time via # Date#to_time. def to_time_in_current_zone + ActiveSupport::Deprecation.warn 'Date#to_time_in_current_zone is deprecated. Use Date#in_time_zone instead', caller + if ::Time.zone ::Time.zone.local(year, month, day) else to_time end end + + # Converts Date to a TimeWithZone in the current zone if Time.zone or Time.zone_default + # is set, otherwise converts Date to a Time via Date#to_time + # + # Time.zone = 'Hawaii' # => 'Hawaii' + # Date.new(2000).in_time_zone # => Sat, 01 Jan 2000 00:00:00 HST -10:00 + # + # You can also pass in a TimeZone instance or string that identifies a TimeZone as an argument, + # and the conversion will be based on that zone instead of Time.zone. + # + # Date.new(2000).in_time_zone('Alaska') # => Sat, 01 Jan 2000 00:00:00 AKST -09:00 + def in_time_zone(zone = ::Time.zone) + if zone + ::Time.find_zone!(zone).local(year, month, day) + else + to_time + end + end end -- cgit v1.2.3