mirror of https://github.com/postgres/postgres
and the integrated doc. Clean up other markup.REL6_5_PATCHES
parent
85170aa9b6
commit
654f8f0b51
File diff suppressed because it is too large
Load Diff
@ -1,155 +1,715 @@ |
||||
From - Mon May 10 15:59:27 1999 |
||||
Received: from localhost (lockhart@localhost [127.0.0.1]) |
||||
by localhost (8.8.7/8.8.7) with ESMTP id PAA24871 |
||||
for <lockhart@localhost>; Wed, 14 Apr 1999 15:45:24 GMT |
||||
Received: from apop-server.alumni.caltech.edu |
||||
by localhost with POP3 (fetchmail-4.7.9) |
||||
for lockhart@localhost (single-drop); Wed, 14 Apr 1999 15:45:26 +0000 (UTC) |
||||
Received: from bologna.nettuno.it (bologna.nettuno.it [193.43.2.1]) |
||||
by alumnus.caltech.edu (8.9.1/8.9.1) with ESMTP id IAA18386 |
||||
for <lockhart@alumni.caltech.edu>; Wed, 14 Apr 1999 08:41:45 -0700 (PDT) |
||||
Received: from proxy.sferacarta.com (mail@sfcabop1.nettuno.it [193.207.10.213]) |
||||
by bologna.nettuno.it (8.8.6/8.8.6/NETTuno 3.1) with ESMTP id RAA15888; |
||||
Wed, 14 Apr 1999 17:41:33 +0200 (MDT) |
||||
Received: from rosso.sferacarta.com (sferacarta.com) [10.20.30.5] |
||||
by proxy.sferacarta.com with esmtp (Exim 2.05 #1 (Debian)) |
||||
id 10XTfQ-00083Z-00; Wed, 14 Apr 1999 17:41:40 +0000 |
||||
Message-ID: <3714B6B6.F745D41D@sferacarta.com> |
||||
Date: Wed, 14 Apr 1999 17:39:34 +0200 |
||||
From: José Soares <jose@sferacarta.com> |
||||
X-Mailer: Mozilla 4.5 [it] (Win95; I) |
||||
X-Accept-Language: it |
||||
MIME-Version: 1.0 |
||||
To: Thomas Lockhart <lockhart@alumni.caltech.edu> |
||||
CC: hackers <pgsql-hackers@postgresql.org>, |
||||
general <pgsql-general@postgresql.org> |
||||
Subject: Re: [GENERAL] Re: [HACKERS] Gregorian Calendar |
||||
References: <3711B1E5.80213DF6@sferacarta.com> <37135951.88FDB948@alumni.caltech.edu> |
||||
Content-Transfer-Encoding: 8bit |
||||
Content-Type: text/plain; charset=iso-8859-1 |
||||
X-UIDL: 25f0580d2a532247ac6af3aee9737b7c |
||||
X-Mozilla-Status: 8011 |
||||
X-Mozilla-Status2: 00000000 |
||||
|
||||
Hi Thomas, |
||||
|
||||
Thomas Lockhart ha scritto: |
||||
|
||||
> > I have a question about dates. |
||||
> > The Gregorian reform of calendar skiped 10 days on Oct, 1582. |
||||
> > This reform was accepted by Great Britain and Dominions (including |
||||
> > what is now the USA) only in 1752. |
||||
> > If I insert a date that doesn't exist PostgreSQL accepts it. |
||||
> > Should it be considered normal ? |
||||
> |
||||
> As Peter says, this is tricky. |
||||
> |
||||
> Date conventions before the 19th century make for interesting reading, |
||||
> but are not imho consistant enough to warrant coding into a date/time |
||||
> handler. |
||||
> |
||||
> As you probably have noticed, we use Julian date calculations for our |
||||
> date/time support. |
||||
|
||||
I suppose you refer to Julian Day invented by the French scholar |
||||
Joseph Justus Scaliger (1540-1609) |
||||
that probably takes its name from the Scaliger's father, |
||||
the Italian scholar Julius Caesar Scaliger (1484-1558). |
||||
Astronomers have used the Julian period to assign a unique number to |
||||
every day since 1 January 4713 BC. This is the so-called Julian Day |
||||
(JD). JD 0 designates the 24 hours from noon UTC on 1 January 4713 BC |
||||
to noon UTC on 2 January 4713 BC. |
||||
|
||||
Julian Day is different from Julian Date |
||||
|
||||
The Julian calendar was introduced by Julius Caesar in 45 BC. It was |
||||
in common use until the 1582, when countries started changing to the |
||||
Gregorian calendar. |
||||
|
||||
In the Julian calendar, the tropical year is approximated as 365 1/4 |
||||
days = 365.25 days. This gives an error of 1 day in approximately 128 |
||||
|
||||
and this is why pope Gregory XIII in accordance with instructions |
||||
from the Council of Trent reformed the calendar to correct this error. |
||||
|
||||
In the Gregorian calendar, the tropical year is approximated as |
||||
365 + 97 / 400 days = 365.2425 days. Thus it takes approximately 3300 |
||||
years for the tropical year to shift one day with respect to the |
||||
Gregorian calendar. |
||||
|
||||
The approximation 365+97/400 is achieved by having 97 leap years |
||||
every 400 years. |
||||
|
||||
The Gregorian calendar has 97 leap years every 400 years: |
||||
<!-- |
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datetime.sgml,v 2.2 1999/05/22 02:27:23 thomas Exp $ |
||||
Date/time details |
||||
|
||||
Every year divisible by 4 is a leap year. |
||||
However, every year divisible by 100 is not a leap year. |
||||
However, every year divisible by 400 is a leap year after all. |
||||
$Log: datetime.sgml,v $ |
||||
Revision 2.2 1999/05/22 02:27:23 thomas |
||||
Finish initial markup of cvs.sgml, and include it in the programmer's guide |
||||
and the integrated doc. Clean up other markup. |
||||
|
||||
So, 1700, 1800, 1900, 2100, and 2200 are not leap years. But 1600, |
||||
2000, and 2400 are leap years. |
||||
--> |
||||
|
||||
instead in the Julian calendar only years divisible by 4 are leap years. |
||||
<appendix label="UG1" id="datetime-append"> |
||||
<title>Date/Time Support</title> |
||||
|
||||
The papal bull of February 1582 decreed that 10 days should be dropped |
||||
from October 1582 so that 15 October should follow immediately after |
||||
4 October. |
||||
This was observed in Italy, Poland, Portugal, and Spain. Other Catholic |
||||
countries followed shortly after, but Protestant countries were |
||||
reluctant to change, and the Greek orthodox countries didn't change |
||||
until the start of this century. |
||||
<sect1> |
||||
<title>Time Zones</title> |
||||
|
||||
The reform was observed by Great Britain and Dominions (including what is |
||||
now the USA) |
||||
in 1752. |
||||
The 2 Sep 1752 was followed by 14 Sep 1752. |
||||
<para> |
||||
<table tocentry="1"> |
||||
<title><productname>Postgres</productname> Recognized Time Zones</title> |
||||
<titleabbrev>Time Zones</titleabbrev> |
||||
<tgroup cols="3"> |
||||
<thead> |
||||
<row> |
||||
<entry>Time Zone</entry> |
||||
<entry>Offset from UTC</entry> |
||||
<entry>Description</entry> |
||||
</row> |
||||
</thead> |
||||
<tbody> |
||||
<row> |
||||
<entry>NZDT</entry> |
||||
<entry>+13:00</entry> |
||||
<entry>New Zealand Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>IDLE</entry> |
||||
<entry>+12:00</entry> |
||||
<entry>International Date Line, East</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NZST</entry> |
||||
<entry>+12:00</entry> |
||||
<entry>New Zealand Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NZT</entry> |
||||
<entry>+12:00</entry> |
||||
<entry>New Zealand Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AESST</entry> |
||||
<entry>+11:00 </entry> |
||||
<entry>Australia Eastern Summer Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ACSST</entry> |
||||
<entry>+10:30 </entry> |
||||
<entry>Central Australia Summer Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CADT</entry> |
||||
<entry>+10:30 </entry> |
||||
<entry>Central Australia Daylight Savings Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>SADT</entry> |
||||
<entry>+10:30</entry> |
||||
<entry>South Australian Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AEST</entry> |
||||
<entry>+10:00 </entry> |
||||
<entry>Australia Eastern Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>EAST</entry> |
||||
<entry>+10:00 </entry> |
||||
<entry>East Australian Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>GST</entry> |
||||
<entry>+10:00</entry> |
||||
<entry>Guam Std Time, USSR Zone 9</entry> |
||||
</row> |
||||
<row> |
||||
<entry>LIGT</entry> |
||||
<entry>+10:00</entry> |
||||
<entry>Melbourne, Australia</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ACST</entry> |
||||
<entry>+09:30 </entry> |
||||
<entry>Central Australia Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CAST</entry> |
||||
<entry>+09:30 </entry> |
||||
<entry>Central Australia Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>SAT</entry> |
||||
<entry>+9:30</entry> |
||||
<entry>South Australian Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AWSST</entry> |
||||
<entry>+9:00 </entry> |
||||
<entry>Australia Western Summer Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>JST</entry> |
||||
<entry>+9:00</entry> |
||||
<entry>Japan Std Time,USSR Zone 8</entry> |
||||
</row> |
||||
<row> |
||||
<entry>KST</entry> |
||||
<entry>+9:00</entry> |
||||
<entry>Korea Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WDT</entry> |
||||
<entry>+9:00</entry> |
||||
<entry>West Australian Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MT</entry> |
||||
<entry>+8:30</entry> |
||||
<entry>Moluccas Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AWST</entry> |
||||
<entry>+8:00 </entry> |
||||
<entry>Australia Western Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CCT</entry> |
||||
<entry>+8:00 </entry> |
||||
<entry>China Coastal Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WADT</entry> |
||||
<entry>+8:00</entry> |
||||
<entry>West Australian Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WST</entry> |
||||
<entry>+8:00</entry> |
||||
<entry>West Australian Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>JT</entry> |
||||
<entry>+7:30</entry> |
||||
<entry>Java Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WAST</entry> |
||||
<entry>+7:00</entry> |
||||
<entry>West Australian Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>IT</entry> |
||||
<entry>+3:30</entry> |
||||
<entry>Iran Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>BT</entry> |
||||
<entry>+3:00 </entry> |
||||
<entry>Baghdad Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>EETDST</entry> |
||||
<entry>+3:00 </entry> |
||||
<entry>Eastern Europe Daylight Savings Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CETDST</entry> |
||||
<entry>+2:00 </entry> |
||||
<entry>Central European Daylight Savings Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>EET</entry> |
||||
<entry>+2:00 </entry> |
||||
<entry>Eastern Europe, USSR Zone 1</entry> |
||||
</row> |
||||
<row> |
||||
<entry>FWT</entry> |
||||
<entry>+2:00</entry> |
||||
<entry>French Winter Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>IST</entry> |
||||
<entry>+2:00</entry> |
||||
<entry>Israel Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MEST</entry> |
||||
<entry>+2:00</entry> |
||||
<entry>Middle Europe Summer Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>METDST</entry> |
||||
<entry>+2:00</entry> |
||||
<entry>Middle Europe Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>SST</entry> |
||||
<entry>+2:00</entry> |
||||
<entry>Swedish Summer Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>BST</entry> |
||||
<entry>+1:00 </entry> |
||||
<entry>British Summer Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CET</entry> |
||||
<entry>+1:00 </entry> |
||||
<entry>Central European Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>DNT</entry> |
||||
<entry>+1:00 </entry> |
||||
<entry>Dansk Normal Tid</entry> |
||||
</row> |
||||
<row> |
||||
<entry>DST</entry> |
||||
<entry>+1:00 </entry> |
||||
<entry>Dansk Standard Time (?)</entry> |
||||
</row> |
||||
<row> |
||||
<entry>FST</entry> |
||||
<entry>+1:00 </entry> |
||||
<entry>French Summer Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MET</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Middle Europe Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MEWT</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Middle Europe Winter Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MEZ</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Middle Europe Zone</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NOR</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Norway Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>SET</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Seychelles Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>SWT</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Swedish Winter Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WETDST</entry> |
||||
<entry>+1:00</entry> |
||||
<entry>Western Europe Daylight Savings Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>GMT</entry> |
||||
<entry>0:00</entry> |
||||
<entry>Greenwish Mean Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WET</entry> |
||||
<entry>0:00</entry> |
||||
<entry>Western Europe</entry> |
||||
</row> |
||||
<row> |
||||
<entry>WAT</entry> |
||||
<entry>-1:00</entry> |
||||
<entry>West Africa Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NDT</entry> |
||||
<entry>-2:30</entry> |
||||
<entry>Newfoundland Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ADT</entry> |
||||
<entry>-03:00 </entry> |
||||
<entry>Atlantic Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NFT</entry> |
||||
<entry>-3:30</entry> |
||||
<entry>Newfoundland Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NST</entry> |
||||
<entry>-3:30</entry> |
||||
<entry>Newfoundland Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AST</entry> |
||||
<entry>-4:00 </entry> |
||||
<entry>Atlantic Std Time (Canada)</entry> |
||||
</row> |
||||
<row> |
||||
<entry>EDT</entry> |
||||
<entry>-4:00 </entry> |
||||
<entry>Eastern Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ZP4</entry> |
||||
<entry>-4:00</entry> |
||||
<entry>GMT +4 hours</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CDT</entry> |
||||
<entry>-5:00 </entry> |
||||
<entry>Central Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>EST</entry> |
||||
<entry>-5:00 </entry> |
||||
<entry>Eastern Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ZP5</entry> |
||||
<entry>-5:00</entry> |
||||
<entry>GMT +5 hours</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CST</entry> |
||||
<entry>-6:00 </entry> |
||||
<entry>Central Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MDT</entry> |
||||
<entry>-6:00</entry> |
||||
<entry>Mountain Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>ZP6</entry> |
||||
<entry>-6:00</entry> |
||||
<entry>GMT +6 hours</entry> |
||||
</row> |
||||
<row> |
||||
<entry>MST</entry> |
||||
<entry>-7:00</entry> |
||||
<entry>Mountain Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>PDT</entry> |
||||
<entry>-7:00</entry> |
||||
<entry>Pacific Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>PST</entry> |
||||
<entry>-8:00</entry> |
||||
<entry>Pacific Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>YDT</entry> |
||||
<entry>-8:00</entry> |
||||
<entry>Yukon Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>HDT</entry> |
||||
<entry>-9:00</entry> |
||||
<entry>Hawaii/Alaska Daylight Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>YST</entry> |
||||
<entry>-9:00</entry> |
||||
<entry>Yukon Standard Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>AHST</entry> |
||||
<entry>-10:00 </entry> |
||||
<entry>Alaska-Hawaii Std Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>CAT</entry> |
||||
<entry>-10:00 </entry> |
||||
<entry>Central Alaska Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>NT</entry> |
||||
<entry>-11:00</entry> |
||||
<entry>Nome Time</entry> |
||||
</row> |
||||
<row> |
||||
<entry>IDLW</entry> |
||||
<entry>-12:00</entry> |
||||
<entry>International Date Line, West</entry> |
||||
</row> |
||||
</tbody> |
||||
</tgroup> |
||||
</table> |
||||
<note> |
||||
<para> |
||||
If the compiler option USE_AUSTRALIAN_RULES is set |
||||
then <literal>EST</literal> refers to Australia Eastern Std Time, |
||||
which has an offset of +10:00 hours from UTC. |
||||
</para> |
||||
</note> |
||||
</para> |
||||
|
||||
This is why unix has the cal 9 1752 like this: |
||||
September 1752 |
||||
S M Tu W Th F S |
||||
1 2 14 15 16 |
||||
17 18 19 20 21 22 23 |
||||
24 25 26 27 28 29 30 |
||||
<para> |
||||
Australian time zones and their naming variants |
||||
account for fully one quarter of all time zones in the |
||||
<productname>Postgres</productname> time zone lookup table. |
||||
</para> |
||||
|
||||
<procedure> |
||||
<title>Date/Time Input Interpretation</title> |
||||
|
||||
<para> |
||||
The date/time types are all decoded using a common set of routines. |
||||
</para> |
||||
|
||||
<step> |
||||
<para> |
||||
Break the input string into tokens and categorize each token as |
||||
a string, time, time zone, or number. |
||||
</para> |
||||
|
||||
<substeps> |
||||
<step> |
||||
<para> |
||||
If the token contains a colon (":"), this is a time string. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If the token contains a dash ("-"), slash ("/"), or dot ("."), |
||||
this is a date string which may have a text month. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If the token is numeric only, then it is either a single field |
||||
or an ISO-8601 concatenated date (e.g. "19990113" for January 13, 1999) |
||||
or time (e.g. 141516 for 14:15:16). |
||||
</para> |
||||
</step> |
||||
<step> |
||||
<para> |
||||
If the token starts with a plus ("+") or minus ("-"), |
||||
then it is either a time zone or a special field. |
||||
</para> |
||||
</step> |
||||
</substeps> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If the token is a text string, match up with possible strings. |
||||
</para> |
||||
|
||||
<substeps> |
||||
<step> |
||||
<para> |
||||
Do a binary-search table lookup for the token |
||||
as either a special string (e.g. <literal>today</literal>), |
||||
day (e.g. <literal>Thursday</literal>), |
||||
month (e.g. <literal>January</literal>), or noise word (e.g. <literal>on</literal>). |
||||
</para> |
||||
<para> |
||||
Set field values and bit mask for fields. |
||||
For example, set year, month, day for <literal>today</literal>, and additionally |
||||
hour, minute, second for <literal>now</literal>. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If not found, do a similar binary-search table lookup to match |
||||
the token with a time zone. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If not found, throw an error. |
||||
</para> |
||||
</step> |
||||
</substeps> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
The token is a number or number field. |
||||
If there are more than 4 digits, |
||||
and if no other date fields have been previously read, then interpret |
||||
as a "concatenated date" (e.g. <literal>19990118</literal>). |
||||
</para> |
||||
|
||||
<substeps> |
||||
<step> |
||||
<para> |
||||
If there are more than 4 digits, |
||||
and if no other date fields have been previously read, then interpret |
||||
as a "concatenated date" (e.g. <literal>19990118</literal>). |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If three digits and a year has already been decoded, then interpret as day of year. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If longer than two digits, then interpret as a year. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If in European date mode, and if the day field has not yet been read, |
||||
and if the value is less than or equal to 31, then interpret as a day. |
||||
</para> |
||||
</step> |
||||
|
||||
<step> |
||||
<para> |
||||
If in non-European (US) date mode, and if the month field has not yet been read, |
||||
and if the value is less than or equal to 12, then interpret as a month. |
||||
</para> |
||||
</step> |
||||
|
||||
My question is: |
||||
^^^^^^^^^^^^ |
||||
<step> |
||||
<para> |
||||
If the day field has not yet been read, |
||||
and if the value is less than or equal to 31, then interpret as a month. |
||||
</para> |
||||
</step> |
||||
|
||||
If SQL92 says: |
||||
<step> |
||||
<para> |
||||
If the month field has not yet been read, |
||||
and if the value is less than or equal to 12, then interpret as a month. |
||||
</para> |
||||
</step> |
||||
|
||||
(Second Informal Review Draft) ISO/IEC 9075:1992, Database |
||||
Language SQL- July 30, 1992 |
||||
<step> |
||||
<para> |
||||
Otherwise, interpret as a year. |
||||
</para> |
||||
</step> |
||||
</substeps> |
||||
</step> |
||||
|
||||
5.3 literals |
||||
22)Within the definition of a <datetime literal>, the <datetime |
||||
value>s are constrained by the natural rules for dates and |
||||
times |
||||
according to the Gregorian calendar. |
||||
^^^^^^^^^^^^^^^ |
||||
<step> |
||||
<para> |
||||
If BC has been specified, negate the year and offset by one |
||||
(there is no year zero in the Gregorian calendar). |
||||
</para> |
||||
</step> |
||||
|
||||
Dates between 1752-09-03 and 1752-09-13. |
||||
Are they valid dates? |
||||
^^^^^^^^^^^^^^^^ |
||||
<step> |
||||
<para> |
||||
If BC was not specified, and if the year field was two digits in length, then |
||||
adjust the year to 4 digits. If the field was less than 70, then add 2000; |
||||
otherwise, add 1900. |
||||
</para> |
||||
</step> |
||||
|
||||
</procedure> |
||||
</sect1> |
||||
|
||||
> They have the nice property of correctly |
||||
> predicting/calculating any date more recent than something like 4013BC |
||||
> to far into the future, using the assumption that the length of the |
||||
> year is 365.25 days. This is a very recently adopted convention |
||||
> (sometime in the 1800s I had thought, but perhaps it was during the |
||||
> same "reform" in 1752). |
||||
> |
||||
> I've toyed with the idea of implementing a Chinese dynastic calendar, |
||||
> since it seems to be more predictable than historical European |
||||
> calendars. |
||||
<sect1> |
||||
<title>History</title> |
||||
|
||||
People's Republic of China uses the Gregorian calendar |
||||
for civil purposes. Chinese calendar is used for determining |
||||
festivals. |
||||
<note> |
||||
<para> |
||||
Contributed by |
||||
<ulink url="jose@sferacarta.com">José Soares</ulink>. |
||||
</para> |
||||
</note> |
||||
|
||||
The beginnings of the Chinese calendar can be traced back to the 14th |
||||
century BC. Legend has it that the Emperor Huangdi invented the |
||||
calendar in 2637 B |
||||
<para> |
||||
The Julian Day invented by the French scholar |
||||
Joseph Justus Scaliger (1540-1609) |
||||
and which probably takes its name from the Scaliger's father, |
||||
the Italian scholar Julius Caesar Scaliger (1484-1558). |
||||
Astronomers have used the Julian period to assign a unique number to |
||||
every day since 1 January 4713 BC. This is the so-called Julian Day |
||||
(JD). JD 0 designates the 24 hours from noon UTC on 1 January 4713 BC |
||||
to noon UTC on 2 January 4713 BC. |
||||
</para> |
||||
|
||||
<para> |
||||
Julian Day is different from Julian Date. |
||||
|
||||
The Julian calendar was introduced by Julius Caesar in 45 BC. It was |
||||
in common use until the 1582, when countries started changing to the |
||||
Gregorian calendar. |
||||
|
||||
In the Julian calendar, the tropical year is approximated as 365 1/4 |
||||
days = 365.25 days. This gives an error of 1 day in approximately |
||||
128 days. |
||||
The accumulating calendar error prompted pope Gregory XIII |
||||
to reform the calendar in accordance with instructions |
||||
from the Council of Trent. |
||||
</para> |
||||
|
||||
<para> |
||||
In the Gregorian calendar, the tropical year is approximated as |
||||
365 + 97 / 400 days = 365.2425 days. Thus it takes approximately 3300 |
||||
years for the tropical year to shift one day with respect to the |
||||
Gregorian calendar. |
||||
</para> |
||||
|
||||
<para> |
||||
The approximation 365+97/400 is achieved by having 97 leap years |
||||
every 400 years, using the following rules: |
||||
|
||||
<simplelist> |
||||
<member> |
||||
Every year divisible by 4 is a leap year. |
||||
</member> |
||||
<member> |
||||
However, every year divisible by 100 is not a leap year. |
||||
</member> |
||||
<member> |
||||
However, every year divisible by 400 is a leap year after all. |
||||
</member> |
||||
</simplelist> |
||||
|
||||
So, 1700, 1800, 1900, 2100, and 2200 are not leap years. But 1600, |
||||
2000, and 2400 are leap years. |
||||
|
||||
By contrast, in the older Julian calendar only years divisible by 4 are leap years. |
||||
</para> |
||||
|
||||
<para> |
||||
The papal bull of February 1582 decreed that 10 days should be dropped |
||||
from October 1582 so that 15 October should follow immediately after |
||||
4 October. |
||||
This was observed in Italy, Poland, Portugal, and Spain. Other Catholic |
||||
countries followed shortly after, but Protestant countries were |
||||
reluctant to change, and the Greek orthodox countries didn't change |
||||
until the start of this century. |
||||
|
||||
The reform was observed by Great Britain and Dominions (including what is |
||||
now the USA) in 1752. |
||||
Thus 2 Sep 1752 was followed by 14 Sep 1752. |
||||
|
||||
This is why Unix systems have <application>cal</application> |
||||
produce the following: |
||||
|
||||
<programlisting> |
||||
% cal 9 1752 |
||||
September 1752 |
||||
S M Tu W Th F S |
||||
1 2 14 15 16 |
||||
17 18 19 20 21 22 23 |
||||
24 25 26 27 28 29 30 |
||||
</programlisting> |
||||
</para> |
||||
|
||||
José |
||||
<note> |
||||
<para> |
||||
SQL92 states that |
||||
<quote>Within the definition of a <sgmltag>datetime literal</sgmltag>, |
||||
the <sgmltag>datetime value</sgmltag>s are constrained by the |
||||
natural rules for dates and times |
||||
according to the Gregorian calendar</quote>. |
||||
Dates between 1752-09-03 and 1752-09-13, although eliminated in |
||||
some countries by Papal fiat, conform to |
||||
<quote>natural rules</quote> and are hence valid dates. |
||||
</para> |
||||
</note> |
||||
|
||||
<para> |
||||
Different calendars have been developed in various parts of the |
||||
world, many predating the Gregorian system. |
||||
|
||||
For example, |
||||
the beginnings of the Chinese calendar can be traced back to the 14th |
||||
century BC. Legend has it that the Emperor Huangdi invented the |
||||
calendar in 2637 BC. |
||||
|
||||
The People's Republic of China uses the Gregorian calendar |
||||
for civil purposes. Chinese calendar is used for determining |
||||
festivals. |
||||
</para> |
||||
</sect1> |
||||
</appendix> |
||||
|
||||
<!-- Keep this comment at the end of the file |
||||
Local variables: |
||||
mode: sgml |
||||
sgml-omittag:nil |
||||
sgml-shorttag:t |
||||
sgml-minimize-attributes:nil |
||||
sgml-always-quote-attributes:t |
||||
sgml-indent-step:1 |
||||
sgml-indent-data:t |
||||
sgml-parent-document:nil |
||||
sgml-default-dtd-file:"./reference.ced" |
||||
sgml-exposed-tags:nil |
||||
sgml-local-catalogs:"/usr/lib/sgml/catalog" |
||||
sgml-local-ecat-files:nil |
||||
End: |
||||
--> |
||||
|
Loading…
Reference in new issue