Re: [GENERAL] leap day bug after 1901

From: José Soares <jose(at)sferacarta(dot)com>
To: hackers <pgsql-hackers(at)postgresql(dot)org>, general <pgsql-general(at)postgresql(dot)org>
Subject: Re: [GENERAL] leap day bug after 1901
Date: 1999-04-13 13:20:49
Message-ID: 371344B1.90F93B32@sferacarta.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

José Soares ha scritto:

> Hi all,
>
> Seems that PostgreSQL checks for leap day only before 1902.
>
> prova=> select date '0001-02-29';
> ERROR: date_in: day must be limited to values 1 through 28 in
> '0001-02-29'
>
> prova=> select date '1701-02-29';
> ERROR: date_in: day must be limited to values 1 through 28 in
> '1701-02-29'
>
> prova=> select date '1901-02-29';
> ERROR: date_in: day must be limited to values 1 through 28 in
> '1901-02-29'
>
> prova=> select date '1902-02-29';
> ?column?
> ----------
> 1902-03-01
> (1 row)

PostgreSQL checks for date validity only for dates less than 1902 and
greater than 2037.

hygea=> select date '1901-04-31';
ERROR: date_in: day must be limited to values 1 through 30 in
'1901-04-31'
hygea=> select date '1902-04-31';
?column?
----------
1902-05-01
(1 row)

hygea=> select date '2037-04-31';
?column?
----------
2037-05-01
(1 row)

hygea=> select date '2038-04-31';
ERROR: date_in: day must be limited to values 1 through 30 in
'2038-04-31'
hygea=>

I looked at ../src/backend/utils/adt/
and I saw things like...

#define MIN_DAYNUM -24856 /* December 13, 1901 */
#define MAX_DAYNUM 24854 /* January 18, 2038 */

/* validate, before going out of range on some members */
if (tm->tm_year < 1901 || tm->tm_year > 2038

#define UTIME_MINYEAR (1901)
#define UTIME_MAXYEAR (2038)

Any body knows what does it mean ?

José

In response to

Browse pgsql-general by date

  From Date Subject
Next Message José Soares 1999-04-13 13:41:03 Re: [GENERAL] leap day bug after 1901
Previous Message José Soares 1999-04-13 13:09:08 Re: [GENERAL] leap day bug after 1901