From: akr@... Date: 2016-06-13T14:09:06+00:00 Subject: [ruby-core:75994] [Ruby trunk Misc#10473] Date.to_datetime.to_time != Date.to_time Issue #10473 has been updated by Akira Tanaka. Similar problem exists on Samoa (Pacific/Apia). There is no 2011-12-30 in Pacific/Apia. http://en.wikipedia.org/wiki/International_Date_Line So, Date.new(2011,12,30) preserves the arguments but Time.new(2011,12,30) doesn't. ``` % TZ=Pacific/Apia ruby -rdate -e 'p Date.new(2011,12,30), Time.new(2011,12,30)' #<Date: 2011-12-30 ((2455926j,0s,0n),+0s,2299161j)> 2011-12-31 00:00:00 +1400 ``` Date doesn't depend on Time as much as possible. In this sense, the current behavior, Date#to_datetime chooses UTC, is reasonable. But if it is too confusing and Date#to_datetime should respect the local time zone using Time, it is better to use only utc_offset as follows instead of the cascading conversion date.to_time.to_datetime. ``` % TZ=Pacific/Apia ruby -rdate -e ' class Date def to_datetime2 DateTime.new(year, mon, mday, 0, 0, 0, Time.new(year, mon, mday).utc_offset/86400r, start) end end d = Date.new(2011,12,30) p d.to_datetime2' #<DateTime: 2011-12-30T00:00:00+14:00 ((2455925j,36000s,0n),+50400s,2299161j)> ``` ---------------------------------------- Misc #10473: Date.to_datetime.to_time != Date.to_time https://bugs.ruby-lang.org/issues/10473#change-59194 * Author: Jack Lowe * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Date.new(2014,1,1).to_datetime.to_time.utc.to_s => "2014-01-01 00:00:00 UTC" Date.new(2014,1,1).to_time.utc.to_s => "2014-01-01 05:00:00 UTC" -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>