Add a few new time zones, and list every time zone mentioned in my
authorThomas G. Lockhart
Wed, 21 Nov 2001 05:58:51 +0000 (05:58 +0000)
committerThomas G. Lockhart
Wed, 21 Nov 2001 05:58:51 +0000 (05:58 +0000)
 Linux box's time zone database.
Do not allow 'current' as a date/time input value.

src/backend/utils/adt/datetime.c

index a6cb8c5695d87bf39fa9b383bfc6acc9c96a1566..0a060c347321f36aae0b4c10f5dfc76d42fdd39b 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.79 2001/11/19 09:05:01 tgl Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.80 2001/11/21 05:58:51 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -73,16 +73,34 @@ static datetkn datetktbl[] = {
 /* text, token, lexval */
    {EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
    {"acsst", DTZ, 63},         /* Cent. Australia */
-   {"acst", TZ, 57},           /* Cent. Australia */
+   {"acst", DTZ, NEG(24)},     /* Atlantic/Porto Acre */
+   {"act", TZ, NEG(30)},       /* Atlantic/Porto Acre */
    {DA_D, ADBC, AD},           /* "ad" for years >= 0 */
    {"abstime", IGNORE, 0},     /* "abstime" for pre-v6.1 "Invalid
                                 * Abstime" */
    {"adt", DTZ, NEG(18)},      /* Atlantic Daylight Time */
    {"aesst", DTZ, 66},         /* E. Australia */
    {"aest", TZ, 60},           /* Australia Eastern Std Time */
+   {"aft", TZ, 27},            /* Kabul */
    {"ahst", TZ, NEG(60)},      /* Alaska-Hawaii Std Time */
+   {"akdt", DTZ, NEG(48)},     /* Alaska Daylight Time */
+   {"akst", DTZ, NEG(54)},     /* Alaska Standard Time */
    {"allballs", RESERV, DTK_ZULU},     /* 00:00:00 */
+   {"almt", TZ, 36},           /* Almaty Time */
+   {"almst", TZ, 42},          /* Almaty Savings Time */
    {"am", AMPM, AM},
+#if 0
+   {"amst", DTZ, 30},          /* Yerevan */
+   {"amst", DTZ, NEG(18)},     /* Porto Velho */
+amt
+anast
+anat
+aqtst
+aqtt
+arst
+art
+ashst
+#endif
    {"apr", MONTH, 4},
    {"april", MONTH, 4},
    {"ast", TZ, NEG(24)},       /* Atlantic Std Time (Canada) */
@@ -91,55 +109,163 @@ static datetkn datetktbl[] = {
    {"august", MONTH, 8},
    {"awsst", DTZ, 54},         /* W. Australia */
    {"awst", TZ, 48},           /* W. Australia */
+   {"awt", DTZ, NEG(18)},
+#if 0
+azost
+azot
+azst
+azt
+#endif
    {DB_C, ADBC, BC},           /* "bc" for years < 0 */
    {"bdst", TZ, 12},           /* British Double Summer Time */
+   {"bdt", TZ, 36},            /* Dacca */
+#if 0
+bnt
+bort
+bortst
+bost
+bot
+brst
+brt
+#endif
    {"bst", TZ, 6},             /* British Summer Time */
    {"bt", TZ, 18},             /* Baghdad Time */
+#if 0
+btt
+#endif
    {"cadt", DTZ, 63},          /* Central Australian DST */
    {"cast", TZ, 57},           /* Central Australian ST */
    {"cat", TZ, NEG(60)},       /* Central Alaska Time */
    {"cct", TZ, 48},            /* China Coast */
+#if 0
+   {"cct", TZ, 39},            /* Indian Cocos (Island) Time */
+#endif
    {"cdt", DTZ, NEG(30)},      /* Central Daylight Time */
    {"cest", DTZ, 12},          /* Central European Dayl.Time */
    {"cet", TZ, 6},             /* Central European Time */
    {"cetdst", DTZ, 12},        /* Central European Dayl.Time */
+#if 0
+chadt
+chast
+ckhst
+ckt
+clst
+clt
+cost
+cot
+#endif
    {"cst", TZ, NEG(36)},       /* Central Standard Time */
+#if 0
+cvst
+cvt
+#endif
+   {"cxt", TZ, 42},            /* Indian Christmas (Island) Time */
    {DCURRENT, RESERV, DTK_CURRENT},    /* "current" is always now */
    {"d", UNITS, DAY},          /* "day of month" for ISO input */
+#if 0
+davt
+ddut
+#endif
    {"dec", MONTH, 12},
    {"december", MONTH, 12},
    {"dnt", TZ, 6},             /* Dansk Normal Tid */
    {"dow", RESERV, DTK_DOW},   /* day of week */
    {"doy", RESERV, DTK_DOY},   /* day of year */
    {"dst", DTZMOD, 6},
-   {"east", TZ, 60},           /* East Australian Std Time */
+#if 0
+   {"dusst", DTZ, 36},         /* Dushanbe Summer Time */
+   {"easst", DTZ, NEG(30)},    /* Easter Island */
+   {"east", TZ, NEG(36)},      /* Easter Island */
+#endif
+   {"east", TZ, 24},           /* Indian Antananarivo Savings Time */
+   {"eat", TZ, 18},            /* Indian Antananarivo Time */
+#if 0
+ect
+#endif
    {"edt", DTZ, NEG(24)},      /* Eastern Daylight Time */
+#if 0
+eest
+#endif
    {"eet", TZ, 12},            /* East. Europe, USSR Zone 1 */
    {"eetdst", DTZ, 18},        /* Eastern Europe */
+#if 0
+egst
+egt
+ehdt
+#endif
    {EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
    {"est", TZ, NEG(30)},       /* Eastern Standard Time */
    {"feb", MONTH, 2},
    {"february", MONTH, 2},
+#if 0
+fjst
+fjt
+fkst
+fkt
+fnst
+fnt
+#endif
    {"fri", DOW, 5},
    {"friday", DOW, 5},
    {"fst", TZ, 6},             /* French Summer Time */
    {"fwt", DTZ, 12},           /* French Winter Time  */
+#if 0
+galt
+gamt
+gest
+get
+gft
+ghst
+gilt
+#endif
    {"gmt", TZ, 0},             /* Greenwish Mean Time */
    {"gst", TZ, 60},            /* Guam Std Time, USSR Zone 9 */
+#if 0
+gyt
+#endif
    {"h", UNITS, HOUR},         /* "hour" */
+#if 0
+hadt
+hast
+#endif
    {"hdt", DTZ, NEG(54)},      /* Hawaii/Alaska */
+#if 0
+hkst
+hkt
+#endif
    {"hmt", DTZ, 18},           /* Hellas ? ? */
+#if 0
+hovst
+hovt
+#endif
    {"hst", TZ, NEG(60)},       /* Hawaii Std Time */
+#if 0
+hwt
+ict
+#endif
    {"idle", TZ, 72},           /* Intl. Date Line, East */
    {"idlw", TZ, NEG(72)},      /* Intl. Date Line, West */
+#if 0
+idt
+#endif
    {LATE, RESERV, DTK_LATE},   /* "infinity" reserved for "late time" */
-   {INVALID, RESERV, DTK_INVALID},
-   /* "invalid" reserved for invalid time */
+   {INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
+   {"iot", TZ, 30},            /* Indian Chagos Time */
+#if 0
+irkst
+irkt
+irt
+isst
+#endif
    {"ist", TZ, 12},            /* Israel */
    {"it", TZ, 21},             /* Iran Time */
    {"j", UNITS, JULIAN},
    {"jan", MONTH, 1},
    {"january", MONTH, 1},
+#if 0
+javt
+jayt
+#endif
    {"jd", UNITS, JULIAN},
    {"jst", TZ, 54},            /* Japan Std Time,USSR Zone 8 */
    {"jt", TZ, 45},             /* Java Time */
@@ -147,11 +273,34 @@ static datetkn datetktbl[] = {
    {"julian", UNITS, JULIAN},
    {"jun", MONTH, 6},
    {"june", MONTH, 6},
+#if 0
+kdt
+kgst
+kgt
+kost
+krast
+krat
+#endif
    {"kst", TZ, 54},            /* Korea Standard Time */
+#if 0
+lhst
+#endif
    {"ligt", TZ, 60},           /* From Melbourne, Australia */
+#if 0
+lint
+lkt
+#endif
    {"m", UNITS, MONTH},        /* "month" for ISO input */
+#if 0
+magst
+magt
+#endif
    {"mar", MONTH, 3},
    {"march", MONTH, 3},
+#if 0
+mart
+#endif
+   {"mawt", TZ, 36},           /* Mawson, Antarctica */
    {"may", MONTH, 5},
    {"mdt", DTZ, NEG(36)},      /* Mountain Daylight Time */
    {"mest", DTZ, 12},          /* Middle Europe Summer Time */
@@ -159,66 +308,183 @@ static datetkn datetktbl[] = {
    {"metdst", DTZ, 12},        /* Middle Europe Daylight Time */
    {"mewt", TZ, 6},            /* Middle Europe Winter Time */
    {"mez", TZ, 6},             /* Middle Europe Zone */
+   {"mht", TZ, 72},            /* Kwajalein */
    {"mm", UNITS, MINUTE},      /* "minute" for ISO input */
+#if 0
+mmt
+#endif
    {"mon", DOW, 1},
    {"monday", DOW, 1},
+#if 0
+most
+mpt
+msd
+msk
+#endif
    {"mst", TZ, NEG(42)},       /* Mountain Standard Time */
    {"mt", TZ, 51},             /* Moluccas Time */
+   {"mut", DTZ, 24},           /* Mauritius Island Time */
+   {"mvt", DTZ, 30},           /* Maldives Island Time */
+#if 0
+myt
+ncst
+nct
+#endif
    {"ndt", DTZ, NEG(15)},      /* Nfld. Daylight Time */
    {"nft", TZ, NEG(21)},       /* Newfoundland Standard Time */
    {"nor", TZ, 6},             /* Norway Standard Time */
    {"nov", MONTH, 11},
    {"november", MONTH, 11},
+#if 0
+novst
+novt
+#endif
    {NOW, RESERV, DTK_NOW},     /* current transaction time */
    {"nst", TZ, NEG(21)},       /* Nfld. Standard Time */
    {"nt", TZ, NEG(66)},        /* Nome Time */
+#if 0
+nut
+#endif
    {"nzdt", DTZ, 78},          /* New Zealand Daylight Time */
    {"nzst", TZ, 72},           /* New Zealand Standard Time */
    {"nzt", TZ, 72},            /* New Zealand Time */
    {"oct", MONTH, 10},
    {"october", MONTH, 10},
+#if 0
+omsst
+omst
+#endif
    {"on", IGNORE, 0},          /* "on" (throwaway) */
    {"pdt", DTZ, NEG(42)},      /* Pacific Daylight Time */
+#if 0
+pest
+pet
+petst
+pett
+pgt
+phot
+phst
+pht
+pkt
+#endif
    {"pm", AMPM, PM},
+#if 0
+pmdt
+pmst
+pont
+#endif
    {"pst", TZ, NEG(48)},       /* Pacific Standard Time */
+#if 0
+pwt
+pyst
+pyt
+#endif
+   {"ret", DTZ, 24},           /* Reunion Island Time */
    {"s", UNITS, SECOND},       /* "seconds" for ISO input */
    {"sadt", DTZ, 63},          /* S. Australian Dayl. Time */
+#if 0
+samst
+samt
+#endif
    {"sast", TZ, 57},           /* South Australian Std Time */
    {"sat", DOW, 6},
    {"saturday", DOW, 6},
+#if 0
+sbt
+#endif
+   {"sct", DTZ, 24},           /* Mahe Island Time */
    {"sep", MONTH, 9},
    {"sept", MONTH, 9},
    {"september", MONTH, 9},
    {"set", TZ, NEG(6)},        /* Seychelles Time ?? */
+#if 0
+sgt
+#endif
    {"sst", DTZ, 12},           /* Swedish Summer Time */
    {"sun", DOW, 0},
    {"sunday", DOW, 0},
    {"swt", TZ, 6},             /* Swedish Winter Time  */
+#if 0
+syot
+#endif
    {"t", DTK_ISO_TIME, 0},     /* Filler for ISO time fields */
+#if 0
+taht
+#endif
+   {"tft", TZ, 30},            /* Kerguelen Time */
    {"thu", DOW, 4},
    {"thur", DOW, 4},
    {"thurs", DOW, 4},
    {"thursday", DOW, 4},
+#if 0
+tjt
+tkt
+tmt
+#endif
    {TODAY, RESERV, DTK_TODAY}, /* midnight */
    {TOMORROW, RESERV, DTK_TOMORROW},   /* tomorrow midnight */
+#if 0
+tost
+tot
+tpt
+trut
+#endif
    {"tue", DOW, 2},
    {"tues", DOW, 2},
    {"tuesday", DOW, 2},
+#if 0
+tvt
+uct
+ulast
+ulat
+#endif
    {"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
    {"ut", TZ, 0},
    {"utc", TZ, 0},
+#if 0
+uyst
+uyt
+uzst
+uzt
+vet
+vlast
+vlat
+vust
+vut
+#endif
    {"wadt", DTZ, 48},          /* West Australian DST */
+#if 0
+wakt
+warst
+#endif
    {"wast", TZ, 42},           /* West Australian Std Time */
    {"wat", TZ, NEG(6)},        /* West Africa Time */
    {"wdt", DTZ, 54},           /* West Australian DST */
    {"wed", DOW, 3},
    {"wednesday", DOW, 3},
    {"weds", DOW, 3},
+#if 0
+west
+#endif
    {"wet", TZ, 0},             /* Western Europe */
    {"wetdst", DTZ, 6},         /* Western Europe */
+#if 0
+wft
+wgst
+wgt
+#endif
    {"wst", TZ, 48},            /* West Australian Std Time */
    {"y", UNITS, YEAR},         /* "year" for ISO input */
+#if 0
+yakst
+yakt
+yapt
+#endif
    {"ydt", DTZ, NEG(48)},      /* Yukon Daylight Time */
+#if 0
+yekst
+yekt
+#endif
    {YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
    {"yst", TZ, NEG(54)},       /* Yukon Standard Time */
    {"z", RESERV, DTK_ZULU},    /* 00:00:00 */
@@ -232,7 +498,9 @@ static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
 
 /* Used for SET australian_timezones to override North American ones */
 static datetkn australian_datetktbl[] = {
+   {"acst", TZ, 57},           /* Cent. Australia */
    {"cst", TZ, 63},            /* Australia Central Std Time */
+   {"east", TZ, 60},           /* East Australian Std Time */
    {"est", TZ, 60},            /* Australia Eastern Std Time */
    {"sat", TZ, 57},
 };
@@ -798,6 +1066,10 @@ DecodeDateTime(char **field, int *ftype, int nf,
                        switch (val)
                        {
                            case DTK_CURRENT:
+                               elog(ERROR, "'CURRENT' is no longer supported");
+                               return -1;
+                               break;
+
                            case DTK_NOW:
                                tmask = (DTK_DATE_M | DTK_TIME_M | DTK_M(TZ));
                                *dtype = DTK_DATE;
@@ -1174,6 +1446,11 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
                    case RESERV:
                        switch (val)
                        {
+                           case DTK_CURRENT:
+                               elog(ERROR, "'CURRENT' is no longer supported");
+                               return -1;
+                               break;
+
                            case DTK_NOW:
                                tmask = DTK_TIME_M;
                                *dtype = DTK_TIME;