From: duerst <noreply@ruby-lang.org>
To: ruby-dev@ruby-lang.org
Subject: [ruby-dev:51186] [Ruby master Bug#18946] Time#to_date returns incorrect date
Date: Fri, 29 Jul 2022 07:03:48 +0000 (UTC) [thread overview]
Message-ID: <redmine.journal-98504.20220729070347.52442@ruby-lang.org> (raw)
In-Reply-To: <redmine.issue-18946.20220729062905.52442@ruby-lang.org>
Issue #18946 has been updated by duerst (Martin Dürst).
This may be due to the Gregorian calendar reform (see https://en.wikipedia.org/wiki/Gregorian_calendar#Gregorian_reform, which says: "Julian Thursday, 4 October 1582, being followed by Gregorian Friday, 15 October").
Time seems to use a proleptic Gregorian calendar (the Gregorian calendar extended to before the Gregorian reform, see https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar) while Date seems to be using the Julian calendar before the 'official' reform date. Please note that the reform didn't get applied at that date everywhere; different parts of the globe changed at different times, and some churches still use the old calendar.
```
Time.local(1582,10,14).to_date
=> #<Date: 1582-10-04 ((2299160j,0s,0n),+0s,2299161j)>
Time.local(1582,10,15).to_date
=> #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,2299161j)>
```
Also, please compare:
```
Time.local(1500,3,1).to_date
=> #<Date: 1500-02-20 ((2268983j,0s,0n),+0s,2299161j)>
Time.local(1500,2,29).to_date
=> #<Date: 1500-02-20 ((2268983j,0s,0n),+0s,2299161j)>
```
(in Time, there's no February 29 in 1500, because it's proleptic)
with
```
Time.local(1500,3,9).to_date
=> #<Date: 1500-02-28 ((2268991j,0s,0n),+0s,2299161j)>
Time.local(1500,3,10).to_date
=> #<Date: 1500-02-29 ((2268992j,0s,0n),+0s,2299161j)>
Time.local(1500,3,11).to_date
=> #<Date: 1500-03-01 ((2268993j,0s,0n),+0s,2299161j)>
```
In Date, there is a February 29 in 1500, because it's Julian.
See also `ri Date`. It may be a good idea to add a note to the documentation for Time, to say that it uses the proleptic Gregorian calendar, and this is different from Date.
Please note that dates are *relatively* easy if the date is close to the present, but the farther you move out, the more complicated it may get.
----------------------------------------
Bug #18946: Time#to_date returns incorrect date
https://bugs.ruby-lang.org/issues/18946#change-98504
* Author: kei-p (Keisuke Ishizawa)
* Status: Open
* Priority: Normal
* ruby -v: 3.1.2
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
Time#to_date returns incorrect date.
Actual Behavior:
```
Time.local(1499, 12, 27).to_date
=> #<Date: 1499-12-18 ((2268919j,0s,0n),+0s,2299161j)>
```
Expected Behavior:
```
Time.local(1499, 12, 27).to_date
=> #<Date: 1499-12-27 ...>
```
--
https://bugs.ruby-lang.org/
next prev parent reply other threads:[~2022-07-29 7:04 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-29 6:29 [ruby-dev:51185] " kei-p (Keisuke Ishizawa)
2022-07-29 7:03 ` duerst [this message]
2022-07-29 8:26 ` [ruby-dev:51187] " kei-p (Keisuke Ishizawa)
2022-07-29 23:06 ` [ruby-dev:51188] " jeremyevans0 (Jeremy Evans)
2022-08-08 3:02 ` [ruby-dev:51192] " matz (Yukihiro Matsumoto)
2022-08-22 3:48 ` [ruby-dev:51194] " nobu (Nobuyoshi Nakada)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=redmine.journal-98504.20220729070347.52442@ruby-lang.org \
--to=noreply@ruby-lang.org \
--cc=ruby-dev@ruby-lang.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).