aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/datetime.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/datetime.sgml')
-rw-r--r--doc/src/sgml/datetime.sgml834
1 files changed, 697 insertions, 137 deletions
diff --git a/doc/src/sgml/datetime.sgml b/doc/src/sgml/datetime.sgml
index eba6dbb583f..3c381c1212e 100644
--- a/doc/src/sgml/datetime.sgml
+++ b/doc/src/sgml/datetime.sgml
@@ -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:
+-->