[ruby-core:75994] [Ruby trunk Misc#10473] Date.to_datetime.to_time != Date.to_time
From:
akr@...
Date:
2016-06-13 14:09:06 UTC
List:
ruby-core #75994
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>