mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
Remove hard-wired lists of timezone abbreviations in favor of providing
configuration files that can be altered by a DBA. The australian_timezones GUC setting disappears, replaced by a timezone_abbreviations setting (set this to 'Australia' to get the effect of australian_timezones). The list of zone names defined by default has undergone a bit of cleanup, too. Documentation still needs some work --- in particular, should we fix Table B-4, or just get rid of it? Joachim Wieland, with some editorializing by moi.
This commit is contained in:
parent
631ea61883
commit
d8b5c95ca8
@ -1,4 +1,4 @@
|
|||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.126 2006/07/10 16:20:49 alvherre Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.127 2006/07/25 03:51:21 tgl Exp $ -->
|
||||||
<!--
|
<!--
|
||||||
Documentation of the system catalogs, directed toward PostgreSQL developers
|
Documentation of the system catalogs, directed toward PostgreSQL developers
|
||||||
-->
|
-->
|
||||||
@ -4559,6 +4559,11 @@
|
|||||||
<entry>tables</entry>
|
<entry>tables</entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
|
<row>
|
||||||
|
<entry><link linkend="view-pg-timezonenames"><structname>pg_timezonenames</structname></link></entry>
|
||||||
|
<entry>time zone abbreviations</entry>
|
||||||
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
<entry><link linkend="view-pg-user"><structname>pg_user</structname></link></entry>
|
<entry><link linkend="view-pg-user"><structname>pg_user</structname></link></entry>
|
||||||
<entry>database users</entry>
|
<entry>database users</entry>
|
||||||
@ -5869,6 +5874,53 @@
|
|||||||
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="view-pg-timezonenames">
|
||||||
|
<title><structname>pg_timezonenames</structname></title>
|
||||||
|
|
||||||
|
<indexterm zone="view-pg-timezonenames">
|
||||||
|
<primary>pg_timezonenames</primary>
|
||||||
|
</indexterm>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The view <structname>pg_timezonenames</structname> provides a list
|
||||||
|
of time zone abbreviations that are currently recognized by the datetime
|
||||||
|
input routines. The contents of this view change when the
|
||||||
|
<xref linkend="guc-timezone-abbreviations"> run-time parameter is modified.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<title><structname>pg_timezonenames</> Columns</title>
|
||||||
|
|
||||||
|
<tgroup cols=3>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Name</entry>
|
||||||
|
<entry>Type</entry>
|
||||||
|
<entry>Description</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry><structfield>name</structfield></entry>
|
||||||
|
<entry><type>text</type></entry>
|
||||||
|
<entry>time zone abbreviation</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><structfield>utc_offset</structfield></entry>
|
||||||
|
<entry><type>interval</type></entry>
|
||||||
|
<entry>offset from UTC (positive means east of Greenwich)</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry><structfield>is_dst</structfield></entry>
|
||||||
|
<entry><type>boolean</type></entry>
|
||||||
|
<entry>true if this is a daylight-savings zone</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="view-pg-user">
|
<sect1 id="view-pg-user">
|
||||||
<title><structname>pg_user</structname></title>
|
<title><structname>pg_user</structname></title>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.68 2006/06/27 22:16:43 momjian Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.69 2006/07/25 03:51:21 tgl Exp $ -->
|
||||||
|
|
||||||
<chapter Id="runtime-config">
|
<chapter Id="runtime-config">
|
||||||
<title>Server Configuration</title>
|
<title>Server Configuration</title>
|
||||||
@ -3410,19 +3410,20 @@ SELECT * FROM parent WHERE key = 2400;
|
|||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry id="guc-australian-timezones" xreflabel="australian_timezones">
|
<varlistentry id="guc-timezone-abbreviations" xreflabel="timezone_abbreviations">
|
||||||
<term><varname>australian_timezones</varname> (<type>boolean</type>)</term>
|
<term><varname>timezone_abbreviations</varname> (<type>string</type>)</term>
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary><varname>australian_timezones</> configuration parameter</primary>
|
<primary><varname>timezone_abbreviations</> configuration parameter</primary>
|
||||||
</indexterm>
|
</indexterm>
|
||||||
<indexterm><primary>time zone</><secondary>Australian</></>
|
<indexterm><primary>time zone names</></>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
If set to on, <literal>ACST</literal>,
|
Sets the collection of time zone abbreviations that will be accepted
|
||||||
<literal>CST</literal>, <literal>EST</literal>, and
|
by the server for datetime input. The default is 'Default',
|
||||||
<literal>SAT</literal> are interpreted as Australian time
|
which is a collection that works in most of the world; there are
|
||||||
zones rather than as North/South American time zones and
|
also 'Australia' and 'India', and other collections can be defined
|
||||||
Saturday. The default is <literal>off</>.
|
for a particular installation. See <xref
|
||||||
|
linkend="datetime-appendix"> for more information.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/datetime.sgml,v 2.50 2006/07/06 01:46:37 momjian Exp $ -->
|
<!-- $PostgreSQL: pgsql/doc/src/sgml/datetime.sgml,v 2.51 2006/07/25 03:51:21 tgl Exp $ -->
|
||||||
|
|
||||||
<appendix id="datetime-appendix">
|
<appendix id="datetime-appendix">
|
||||||
<title>Date/Time Support</title>
|
<title>Date/Time Support</title>
|
||||||
@ -361,15 +361,25 @@
|
|||||||
</indexterm>
|
</indexterm>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
<xref linkend="datetime-timezone-input-table"> and
|
<xref linkend="datetime-timezone-input-table"> shows the time zone
|
||||||
<xref linkend="datetime-timezone-full-names-table"> show the time zone
|
|
||||||
abbreviations recognized by <productname>PostgreSQL</productname>
|
abbreviations recognized by <productname>PostgreSQL</productname>
|
||||||
in date/time input values. Note that these names are <emphasis>not</>
|
in date/time input values. These abbreviations are not
|
||||||
necessarily used for date/time output — output is driven by the
|
hard-wired into the server, but are obtained from a configuration
|
||||||
official timezone abbreviation(s) associated with the currently selected
|
file (see <xref linkend="datetime-config-files">). Note that these
|
||||||
<xref linkend="guc-timezone"> parameter setting. (It is
|
names are <emphasis>not</> used for date/time output — all supported
|
||||||
likely that future releases will make some use of <varname>timezone</>
|
output formats use numeric timezone displays to avoid ambiguity.
|
||||||
for input as well.)
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In addition to these abbreviations, the full timezone names shown in
|
||||||
|
<xref linkend="datetime-timezone-full-names-table"> can be used
|
||||||
|
in date/time input values. There is a conceptual and
|
||||||
|
practical difference between the abbreviations and the full names:
|
||||||
|
abbreviations always represent a fixed offset from UTC, whereas most
|
||||||
|
of the full names imply a local daylight-savings time rule and so
|
||||||
|
have two possible UTC offsets. That's why
|
||||||
|
you always have to specify a date if you want to use full time zone
|
||||||
|
names in <type>timetz</> values.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -925,61 +935,6 @@
|
|||||||
</tgroup>
|
</tgroup>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<formalpara>
|
|
||||||
<title>Australian Time Zones</title>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
There are three naming conflicts between Australian time zone
|
|
||||||
names and time zone names commonly used in North and South America:
|
|
||||||
<literal>ACST</literal>, <literal>CST</literal>, and
|
|
||||||
<literal>EST</literal>. If the run-time option
|
|
||||||
<varname>australian_timezones</varname> is set to true then
|
|
||||||
<literal>ACST</literal>, <literal>CST</literal>,
|
|
||||||
<literal>EST</literal>, and <literal>SAT</literal> are interpreted
|
|
||||||
as Australian time zone names, as shown in <xref
|
|
||||||
linkend="datetime-oztz-table">. If it is false (which is the
|
|
||||||
default), then <literal>ACST</literal>, <literal>CST</literal>,
|
|
||||||
and <literal>EST</literal> are taken as American time zone names,
|
|
||||||
and <literal>SAT</literal> is interpreted as a noise word
|
|
||||||
indicating Saturday.
|
|
||||||
</para>
|
|
||||||
</formalpara>
|
|
||||||
|
|
||||||
<table id="datetime-oztz-table">
|
|
||||||
<title>Australian Time Zone Abbreviations for Input</title>
|
|
||||||
<tgroup cols="3">
|
|
||||||
<thead>
|
|
||||||
<row>
|
|
||||||
<entry>Time Zone</entry>
|
|
||||||
<entry>Offset from UTC</entry>
|
|
||||||
<entry>Description</entry>
|
|
||||||
</row>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<row>
|
|
||||||
<entry>ACST</entry>
|
|
||||||
<entry>+09:30</entry>
|
|
||||||
<entry>Central Australia Standard Time</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>CST</entry>
|
|
||||||
<entry>+10:30</entry>
|
|
||||||
<entry>Australian Central Standard Time</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>EST</entry>
|
|
||||||
<entry>+10:00</entry>
|
|
||||||
<entry>Australian Eastern Standard Time</entry>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<entry>SAT</entry>
|
|
||||||
<entry>+09:30</entry>
|
|
||||||
<entry>South Australian Standard Time</entry>
|
|
||||||
</row>
|
|
||||||
</tbody>
|
|
||||||
</tgroup>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<indexterm>
|
<indexterm>
|
||||||
<primary>time zone</primary>
|
<primary>time zone</primary>
|
||||||
<secondary>configuration names</secondary>
|
<secondary>configuration names</secondary>
|
||||||
@ -988,13 +943,10 @@
|
|||||||
<para>
|
<para>
|
||||||
<xref linkend="datetime-timezone-full-names-table"> shows the time zone
|
<xref linkend="datetime-timezone-full-names-table"> shows the time zone
|
||||||
names recognized by <productname>PostgreSQL</productname> as valid
|
names recognized by <productname>PostgreSQL</productname> as valid
|
||||||
settings for the <xref linkend="guc-timezone"> parameter. Note that
|
settings for the <xref linkend="guc-timezone"> parameter. These names
|
||||||
these names are conceptually as well as practically different from
|
are not hard-wired into the server, but are in fact names of configuration
|
||||||
the names shown in <xref linkend="datetime-timezone-input-table">:
|
files stored under <filename>.../share/timezone/</> of the installation
|
||||||
most of these names imply a local daylight-savings time rule, whereas
|
directory.
|
||||||
the former names each represent just a fixed offset from UTC. That's why
|
|
||||||
you always have to specify a date if you want to use these time zone
|
|
||||||
names in <type>timetz</> values.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
@ -1004,7 +956,7 @@
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<table id="datetime-timezone-full-names-table">
|
<table id="datetime-timezone-full-names-table">
|
||||||
<title>Time Zone Names for date/time input values and for setting <varname>timezone</></title>
|
<title>Time Zone Names for setting <varname>timezone</></title>
|
||||||
<tgroup cols="1">
|
<tgroup cols="1">
|
||||||
<thead>
|
<thead>
|
||||||
<row>
|
<row>
|
||||||
@ -2230,7 +2182,8 @@
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
In addition to the names listed in the table,
|
In addition to the names listed in the table,
|
||||||
<productname>PostgreSQL</productname> will accept time zone names of the
|
<productname>PostgreSQL</productname> will accept
|
||||||
|
<xref linkend="guc-timezone"> values of the
|
||||||
form <replaceable>STD</><replaceable>offset</> or
|
form <replaceable>STD</><replaceable>offset</> or
|
||||||
<replaceable>STD</><replaceable>offset</><replaceable>DST</>, where
|
<replaceable>STD</><replaceable>offset</><replaceable>DST</>, where
|
||||||
<replaceable>STD</> is a zone abbreviation, <replaceable>offset</> is a
|
<replaceable>STD</> is a zone abbreviation, <replaceable>offset</> is a
|
||||||
@ -2250,6 +2203,108 @@
|
|||||||
|
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="datetime-config-files">
|
||||||
|
<title>Date/Time Configuration Files</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Since timezone abbreviations are not well standardized,
|
||||||
|
<productname>PostgreSQL</productname> provides a means to customize
|
||||||
|
the set of abbreviations accepted by the server. The
|
||||||
|
<xref linkend="guc-timezone-abbreviations"> run-time parameter
|
||||||
|
determines the active set of abbreviations. While this parameter
|
||||||
|
can be altered by any database user, the possible values for it
|
||||||
|
are under the control of the database administrator — they
|
||||||
|
are in fact names of configuration files stored in
|
||||||
|
<filename>.../share/timezonesets/</> of the installation directory.
|
||||||
|
By adding or altering files in that directory, the administrator
|
||||||
|
can set local policy for timezone abbreviations.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>timezone_abbreviations</> can be set to any file name
|
||||||
|
found in <filename>.../share/timezonesets/</>, if the file's name
|
||||||
|
is entirely alphabetic. (The prohibition against non-alphabetic
|
||||||
|
characters in <literal>timezone_abbreviations</> prevents reading
|
||||||
|
files outside the intended directory, as well as reading editor
|
||||||
|
backup files and other extraneous files.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A timezone abbreviation file may contain blank lines and comments
|
||||||
|
beginning with <literal>#</>. Non-comment lines must have one of
|
||||||
|
these formats:
|
||||||
|
|
||||||
|
<synopsis>
|
||||||
|
<replaceable>time_zone_name</replaceable> <replaceable>offset</replaceable>
|
||||||
|
<replaceable>time_zone_name</replaceable> <replaceable>offset</replaceable> D
|
||||||
|
@INCLUDE <replaceable>file_name</replaceable>
|
||||||
|
@OVERRIDE
|
||||||
|
</synopsis>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <replaceable>time_zone_name</replaceable> is just the abbreviation
|
||||||
|
being defined. The <replaceable>offset</replaceable> is the zone's
|
||||||
|
offset in seconds from UTC, positive being east from Greenwich and
|
||||||
|
negative being west. For example, -18000 would be five hours west
|
||||||
|
of Greenwich, or North American east coast standard time. <literal>D</>
|
||||||
|
indicates that the zone name represents local daylight-savings time
|
||||||
|
rather than standard time.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>@INCLUDE</> syntax allows inclusion of another file in the
|
||||||
|
<filename>.../share/timezonesets/</> directory. Inclusion can be nested,
|
||||||
|
to a limited depth.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>@OVERRIDE</> syntax indicates that subsequent entries in the
|
||||||
|
file may override previous entries (i.e., entries obtained from included
|
||||||
|
files). Without this, conflicting definitions of the same timezone
|
||||||
|
abbreviation are considered an error.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In an unmodified installation, the file <filename>Default</> contains
|
||||||
|
all the non-conflicting time zone abbreviations for most of the world.
|
||||||
|
Additional files <filename>Australia</> and <filename>India</> are
|
||||||
|
provided for those regions: these files first include the
|
||||||
|
<literal>Default</> file and then add or modify timezones as needed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For reference purposes, a standard installation also contains files
|
||||||
|
<filename>Africa.txt</>, <filename>America.txt</>, etc, containing
|
||||||
|
information about every time zone abbreviation known to be in use
|
||||||
|
according to the <literal>zic</> timezone database. The zone name
|
||||||
|
definitions found in these files can be copied and pasted into a custom
|
||||||
|
configuration file as needed. Note that these files cannot be directly
|
||||||
|
referenced as <literal>timezone_abbreviations</> settings, because of
|
||||||
|
the dot embedded in their names.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<caution>
|
||||||
|
<para>
|
||||||
|
Time zone abbreviations defined in the configuration file override
|
||||||
|
non-timezone meanings built into <productname>PostgreSQL</productname>.
|
||||||
|
For example, the <filename>Australia</> configuration file defines
|
||||||
|
<literal>SAT</> (for South Australian Standard Time). When this
|
||||||
|
file is active, <literal>SAT</> will not be recognized as an abbreviation
|
||||||
|
for Saturday.
|
||||||
|
</para>
|
||||||
|
</caution>
|
||||||
|
|
||||||
|
<caution>
|
||||||
|
<para>
|
||||||
|
If you modify files in <filename>.../share/timezonesets/</>,
|
||||||
|
it is up to you to make backups — a normal database dump
|
||||||
|
will not include this directory.
|
||||||
|
</para>
|
||||||
|
</caution>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
<sect1 id="datetime-units-history">
|
<sect1 id="datetime-units-history">
|
||||||
<title>History of Units</title>
|
<title>History of Units</title>
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.40 2006/06/18 15:38:36 petere Exp $
|
$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.41 2006/07/25 03:51:21 tgl Exp $
|
||||||
PostgreSQL documentation
|
PostgreSQL documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -168,7 +168,6 @@ SHOW ALL;
|
|||||||
--------------------------------+--------------------------------+----------------------------------------------------------------------------------------------
|
--------------------------------+--------------------------------+----------------------------------------------------------------------------------------------
|
||||||
add_missing_from | off | Automatically adds missing table references to FROM clauses.
|
add_missing_from | off | Automatically adds missing table references to FROM clauses.
|
||||||
archive_command | unset | WAL archiving command.
|
archive_command | unset | WAL archiving command.
|
||||||
australian_timezones | off | Interprets ACST, CST, EST, and SAT as Australian time zones.
|
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
.
|
.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.27 2006/05/19 19:08:26 alvherre Exp $
|
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.28 2006/07/25 03:51:21 tgl Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CREATE VIEW pg_roles AS
|
CREATE VIEW pg_roles AS
|
||||||
@ -186,6 +186,11 @@ CREATE RULE pg_settings_n AS
|
|||||||
|
|
||||||
GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
|
GRANT SELECT, UPDATE ON pg_settings TO PUBLIC;
|
||||||
|
|
||||||
|
CREATE VIEW pg_timezonenames AS
|
||||||
|
SELECT *
|
||||||
|
FROM pg_timezonenames() AS T
|
||||||
|
(name text, utc_offset interval, is_dst boolean);
|
||||||
|
|
||||||
-- Statistics views
|
-- Statistics views
|
||||||
|
|
||||||
CREATE VIEW pg_stat_all_tables AS
|
CREATE VIEW pg_stat_all_tables AS
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.168 2006/07/14 05:28:28 tgl Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.169 2006/07/25 03:51:21 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -19,11 +19,15 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "access/heapam.h"
|
||||||
#include "access/xact.h"
|
#include "access/xact.h"
|
||||||
|
#include "catalog/pg_type.h"
|
||||||
|
#include "funcapi.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
#include "utils/datetime.h"
|
#include "utils/datetime.h"
|
||||||
#include "utils/guc.h"
|
#include "utils/memutils.h"
|
||||||
|
#include "utils/tzparser.h"
|
||||||
|
|
||||||
|
|
||||||
static int DecodeNumber(int flen, char *field, bool haveTextMonth,
|
static int DecodeNumber(int flen, char *field, bool haveTextMonth,
|
||||||
@ -37,7 +41,7 @@ static int DecodeTime(char *str, int fmask, int *tmask,
|
|||||||
static int DecodeTimezone(char *str, int *tzp);
|
static int DecodeTimezone(char *str, int *tzp);
|
||||||
static int DecodePosixTimezone(char *str, int *tzp);
|
static int DecodePosixTimezone(char *str, int *tzp);
|
||||||
static int DecodeZicTimezone(char *str, int *tzp, struct pg_tm * tm);
|
static int DecodeZicTimezone(char *str, int *tzp, struct pg_tm * tm);
|
||||||
static datetkn *datebsearch(char *key, datetkn *base, unsigned int nel);
|
static const datetkn *datebsearch(const char *key, const datetkn *base, int nel);
|
||||||
static int DecodeDate(char *str, int fmask, int *tmask, struct pg_tm * tm);
|
static int DecodeDate(char *str, int fmask, int *tmask, struct pg_tm * tm);
|
||||||
static void TrimTrailingZeros(char *str);
|
static void TrimTrailingZeros(char *str);
|
||||||
|
|
||||||
@ -87,426 +91,92 @@ char *days[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
|
|||||||
* which are 30 or 45 minutes away from an even hour, most are on an hour
|
* which are 30 or 45 minutes away from an even hour, most are on an hour
|
||||||
* boundary, and none on other boundaries.
|
* boundary, and none on other boundaries.
|
||||||
*
|
*
|
||||||
* Let's include all strings from my current zic time zone database.
|
* The static table contains no TZ or DTZ entries, rather those are loaded
|
||||||
* Not all of them are unique, or even very understandable, so we will
|
* from configuration files and stored in timezonetktbl, which has the same
|
||||||
* leave some commented out for now.
|
* format as the static datetktbl.
|
||||||
*/
|
*/
|
||||||
static datetkn datetktbl[] = {
|
static datetkn *timezonetktbl = NULL;
|
||||||
|
|
||||||
|
static int sztimezonetktbl = 0;
|
||||||
|
|
||||||
|
static const datetkn datetktbl[] = {
|
||||||
/* text, token, lexval */
|
/* text, token, lexval */
|
||||||
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
|
{EARLY, RESERV, DTK_EARLY}, /* "-infinity" reserved for "early time" */
|
||||||
{"abstime", IGNORE_DTF, 0}, /* for pre-v6.1 "Invalid Abstime" */
|
{"abstime", IGNORE_DTF, 0}, /* for pre-v6.1 "Invalid Abstime" */
|
||||||
{"acsst", DTZ, POS(42)}, /* Cent. Australia */
|
|
||||||
{"acst", DTZ, NEG(16)}, /* Atlantic/Porto Acre Summer Time */
|
|
||||||
{"act", TZ, NEG(20)}, /* Atlantic/Porto Acre Time */
|
|
||||||
{DA_D, ADBC, AD}, /* "ad" for years > 0 */
|
{DA_D, ADBC, AD}, /* "ad" for years > 0 */
|
||||||
{"adt", DTZ, NEG(12)}, /* Atlantic Daylight Time */
|
|
||||||
{"aesst", DTZ, POS(44)}, /* E. Australia */
|
|
||||||
{"aest", TZ, POS(40)}, /* Australia Eastern Std Time */
|
|
||||||
{"aft", TZ, POS(18)}, /* Kabul */
|
|
||||||
{"ahst", TZ, NEG(40)}, /* Alaska-Hawaii Std Time */
|
|
||||||
{"akdt", DTZ, NEG(32)}, /* Alaska Daylight Time */
|
|
||||||
{"akst", DTZ, NEG(36)}, /* Alaska Standard Time */
|
|
||||||
{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
|
{"allballs", RESERV, DTK_ZULU}, /* 00:00:00 */
|
||||||
{"almst", TZ, POS(28)}, /* Almaty Savings Time */
|
|
||||||
{"almt", TZ, POS(24)}, /* Almaty Time */
|
|
||||||
{"am", AMPM, AM},
|
{"am", AMPM, AM},
|
||||||
{"amst", DTZ, POS(20)}, /* Armenia Summer Time (Yerevan) */
|
|
||||||
#if 0
|
|
||||||
{"amst", DTZ, NEG(12)}, /* Amazon Summer Time (Porto Velho) */
|
|
||||||
#endif
|
|
||||||
{"amt", TZ, POS(16)}, /* Armenia Time (Yerevan) */
|
|
||||||
#if 0
|
|
||||||
{"amt", TZ, NEG(16)}, /* Amazon Time (Porto Velho) */
|
|
||||||
#endif
|
|
||||||
{"anast", DTZ, POS(52)}, /* Anadyr Summer Time (Russia) */
|
|
||||||
{"anat", TZ, POS(48)}, /* Anadyr Time (Russia) */
|
|
||||||
{"apr", MONTH, 4},
|
{"apr", MONTH, 4},
|
||||||
{"april", MONTH, 4},
|
{"april", MONTH, 4},
|
||||||
#if 0
|
|
||||||
aqtst
|
|
||||||
aqtt
|
|
||||||
arst
|
|
||||||
#endif
|
|
||||||
{"art", TZ, NEG(12)}, /* Argentina Time */
|
|
||||||
#if 0
|
|
||||||
ashst
|
|
||||||
ast /* Atlantic Standard Time, Arabia Standard
|
|
||||||
* Time, Acre Standard Time */
|
|
||||||
#endif
|
|
||||||
{"ast", TZ, NEG(16)}, /* Atlantic Std Time (Canada) */
|
|
||||||
{"at", IGNORE_DTF, 0}, /* "at" (throwaway) */
|
{"at", IGNORE_DTF, 0}, /* "at" (throwaway) */
|
||||||
{"aug", MONTH, 8},
|
{"aug", MONTH, 8},
|
||||||
{"august", MONTH, 8},
|
{"august", MONTH, 8},
|
||||||
{"awsst", DTZ, POS(36)}, /* W. Australia */
|
|
||||||
{"awst", TZ, POS(32)}, /* W. Australia */
|
|
||||||
{"awt", DTZ, NEG(12)},
|
|
||||||
{"azost", DTZ, POS(0)}, /* Azores Summer Time */
|
|
||||||
{"azot", TZ, NEG(4)}, /* Azores Time */
|
|
||||||
{"azst", DTZ, POS(20)}, /* Azerbaijan Summer Time */
|
|
||||||
{"azt", TZ, POS(16)}, /* Azerbaijan Time */
|
|
||||||
{DB_C, ADBC, BC}, /* "bc" for years <= 0 */
|
{DB_C, ADBC, BC}, /* "bc" for years <= 0 */
|
||||||
{"bdst", TZ, POS(8)}, /* British Double Summer Time */
|
|
||||||
{"bdt", TZ, POS(24)}, /* Dacca */
|
|
||||||
{"bnt", TZ, POS(32)}, /* Brunei Darussalam Time */
|
|
||||||
{"bort", TZ, POS(32)}, /* Borneo Time (Indonesia) */
|
|
||||||
#if 0
|
|
||||||
bortst
|
|
||||||
bost
|
|
||||||
#endif
|
|
||||||
{"bot", TZ, NEG(16)}, /* Bolivia Time */
|
|
||||||
{"bra", TZ, NEG(12)}, /* Brazil Time */
|
|
||||||
{"brst", DTZ, NEG(8)}, /* Brasilia Summer Time */
|
|
||||||
{"brt", TZ, NEG(12)}, /* Brasilia Time */
|
|
||||||
{"bst", DTZ, POS(4)}, /* British Summer Time */
|
|
||||||
#if 0
|
|
||||||
{"bst", TZ, NEG(12)}, /* Brazil Standard Time */
|
|
||||||
{"bst", DTZ, NEG(44)}, /* Bering Summer Time */
|
|
||||||
#endif
|
|
||||||
{"bt", TZ, POS(12)}, /* Baghdad Time */
|
|
||||||
{"btt", TZ, POS(24)}, /* Bhutan Time */
|
|
||||||
{"cadt", DTZ, POS(42)}, /* Central Australian DST */
|
|
||||||
{"cast", TZ, POS(38)}, /* Central Australian ST */
|
|
||||||
{"cat", TZ, NEG(40)}, /* Central Alaska Time */
|
|
||||||
{"cct", TZ, POS(32)}, /* China Coast Time */
|
|
||||||
#if 0
|
|
||||||
{"cct", TZ, POS(26)}, /* Indian Cocos (Island) Time */
|
|
||||||
#endif
|
|
||||||
{"cdt", DTZ, NEG(20)}, /* Central Daylight Time */
|
|
||||||
{"cest", DTZ, POS(8)}, /* Central European Dayl.Time */
|
|
||||||
{"cet", TZ, POS(4)}, /* Central European Time */
|
|
||||||
{"cetdst", DTZ, POS(8)}, /* Central European Dayl.Time */
|
|
||||||
{"chadt", DTZ, POS(55)}, /* Chatham Island Daylight Time (13:45) */
|
|
||||||
{"chast", TZ, POS(51)}, /* Chatham Island Time (12:45) */
|
|
||||||
#if 0
|
|
||||||
ckhst
|
|
||||||
#endif
|
|
||||||
{"ckt", TZ, POS(48)}, /* Cook Islands Time */
|
|
||||||
{"clst", DTZ, NEG(12)}, /* Chile Summer Time */
|
|
||||||
{"clt", TZ, NEG(16)}, /* Chile Time */
|
|
||||||
#if 0
|
|
||||||
cost
|
|
||||||
#endif
|
|
||||||
{"cot", TZ, NEG(20)}, /* Columbia Time */
|
|
||||||
{"cst", TZ, NEG(24)}, /* Central Standard Time */
|
|
||||||
{DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */
|
{DCURRENT, RESERV, DTK_CURRENT}, /* "current" is always now */
|
||||||
#if 0
|
|
||||||
cvst
|
|
||||||
#endif
|
|
||||||
{"cvt", TZ, POS(28)}, /* Christmas Island Time (Indian Ocean) */
|
|
||||||
{"cxt", TZ, POS(28)}, /* Christmas Island Time (Indian Ocean) */
|
|
||||||
{"d", UNITS, DTK_DAY}, /* "day of month" for ISO input */
|
{"d", UNITS, DTK_DAY}, /* "day of month" for ISO input */
|
||||||
{"davt", TZ, POS(28)}, /* Davis Time (Antarctica) */
|
|
||||||
{"ddut", TZ, POS(40)}, /* Dumont-d'Urville Time (Antarctica) */
|
|
||||||
{"dec", MONTH, 12},
|
{"dec", MONTH, 12},
|
||||||
{"december", MONTH, 12},
|
{"december", MONTH, 12},
|
||||||
{"dnt", TZ, POS(4)}, /* Dansk Normal Tid */
|
|
||||||
{"dow", RESERV, DTK_DOW}, /* day of week */
|
{"dow", RESERV, DTK_DOW}, /* day of week */
|
||||||
{"doy", RESERV, DTK_DOY}, /* day of year */
|
{"doy", RESERV, DTK_DOY}, /* day of year */
|
||||||
{"dst", DTZMOD, 6},
|
{"dst", DTZMOD, 6},
|
||||||
#if 0
|
|
||||||
{"dusst", DTZ, POS(24)}, /* Dushanbe Summer Time */
|
|
||||||
#endif
|
|
||||||
{"easst", DTZ, NEG(20)}, /* Easter Island Summer Time */
|
|
||||||
{"east", TZ, NEG(24)}, /* Easter Island Time */
|
|
||||||
{"eat", TZ, POS(12)}, /* East Africa Time */
|
|
||||||
#if 0
|
|
||||||
{"east", DTZ, POS(16)}, /* Indian Antananarivo Savings Time */
|
|
||||||
{"eat", TZ, POS(12)}, /* Indian Antananarivo Time */
|
|
||||||
{"ect", TZ, NEG(16)}, /* Eastern Caribbean Time */
|
|
||||||
{"ect", TZ, NEG(20)}, /* Ecuador Time */
|
|
||||||
#endif
|
|
||||||
{"edt", DTZ, NEG(16)}, /* Eastern Daylight Time */
|
|
||||||
{"eest", DTZ, POS(12)}, /* Eastern Europe Summer Time */
|
|
||||||
{"eet", TZ, POS(8)}, /* East. Europe, USSR Zone 1 */
|
|
||||||
{"eetdst", DTZ, POS(12)}, /* Eastern Europe Daylight Time */
|
|
||||||
{"egst", DTZ, POS(0)}, /* East Greenland Summer Time */
|
|
||||||
{"egt", TZ, NEG(4)}, /* East Greenland Time */
|
|
||||||
#if 0
|
|
||||||
ehdt
|
|
||||||
#endif
|
|
||||||
{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
|
{EPOCH, RESERV, DTK_EPOCH}, /* "epoch" reserved for system epoch time */
|
||||||
{"est", TZ, NEG(20)}, /* Eastern Standard Time */
|
|
||||||
{"feb", MONTH, 2},
|
{"feb", MONTH, 2},
|
||||||
{"february", MONTH, 2},
|
{"february", MONTH, 2},
|
||||||
{"fjst", DTZ, NEG(52)}, /* Fiji Summer Time (13 hour offset!) */
|
|
||||||
{"fjt", TZ, NEG(48)}, /* Fiji Time */
|
|
||||||
{"fkst", DTZ, NEG(12)}, /* Falkland Islands Summer Time */
|
|
||||||
{"fkt", TZ, NEG(8)}, /* Falkland Islands Time */
|
|
||||||
{"fnst", DTZ, NEG(4)}, /* Fernando de Noronha Summer Time */
|
|
||||||
{"fnt", TZ, NEG(8)}, /* Fernando de Noronha Time */
|
|
||||||
{"fri", DOW, 5},
|
{"fri", DOW, 5},
|
||||||
{"friday", DOW, 5},
|
{"friday", DOW, 5},
|
||||||
{"fst", TZ, POS(4)}, /* French Summer Time */
|
|
||||||
{"fwt", DTZ, POS(8)}, /* French Winter Time */
|
|
||||||
{"galt", TZ, NEG(24)}, /* Galapagos Time */
|
|
||||||
{"gamt", TZ, NEG(36)}, /* Gambier Time */
|
|
||||||
{"gest", DTZ, POS(20)}, /* Georgia Summer Time */
|
|
||||||
{"get", TZ, POS(16)}, /* Georgia Time */
|
|
||||||
{"gft", TZ, NEG(12)}, /* French Guiana Time */
|
|
||||||
#if 0
|
|
||||||
ghst
|
|
||||||
#endif
|
|
||||||
{"gilt", TZ, POS(48)}, /* Gilbert Islands Time */
|
|
||||||
{"gmt", TZ, POS(0)}, /* Greenwich Mean Time */
|
|
||||||
{"gst", TZ, POS(40)}, /* Guam Std Time, USSR Zone 9 */
|
|
||||||
{"gyt", TZ, NEG(16)}, /* Guyana Time */
|
|
||||||
{"h", UNITS, DTK_HOUR}, /* "hour" */
|
{"h", UNITS, DTK_HOUR}, /* "hour" */
|
||||||
#if 0
|
|
||||||
hadt
|
|
||||||
hast
|
|
||||||
#endif
|
|
||||||
{"hdt", DTZ, NEG(36)}, /* Hawaii/Alaska Daylight Time */
|
|
||||||
#if 0
|
|
||||||
hkst
|
|
||||||
#endif
|
|
||||||
{"hkt", TZ, POS(32)}, /* Hong Kong Time */
|
|
||||||
#if 0
|
|
||||||
{"hmt", TZ, POS(12)}, /* Hellas ? ? */
|
|
||||||
hovst
|
|
||||||
hovt
|
|
||||||
#endif
|
|
||||||
{"hst", TZ, NEG(40)}, /* Hawaii Std Time */
|
|
||||||
#if 0
|
|
||||||
hwt
|
|
||||||
#endif
|
|
||||||
{"ict", TZ, POS(28)}, /* Indochina Time */
|
|
||||||
{"idle", TZ, POS(48)}, /* Intl. Date Line, East */
|
|
||||||
{"idlw", TZ, NEG(48)}, /* Intl. Date Line, West */
|
|
||||||
#if 0
|
|
||||||
idt /* Israeli, Iran, Indian Daylight Time */
|
|
||||||
#endif
|
|
||||||
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
|
{LATE, RESERV, DTK_LATE}, /* "infinity" reserved for "late time" */
|
||||||
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
|
{INVALID, RESERV, DTK_INVALID}, /* "invalid" reserved for bad time */
|
||||||
{"iot", TZ, POS(20)}, /* Indian Chagos Time */
|
|
||||||
{"irkst", DTZ, POS(36)}, /* Irkutsk Summer Time */
|
|
||||||
{"irkt", TZ, POS(32)}, /* Irkutsk Time */
|
|
||||||
{"irt", TZ, POS(14)}, /* Iran Time */
|
|
||||||
#if 0
|
|
||||||
isst
|
|
||||||
#endif
|
|
||||||
{"ist", TZ, POS(8)}, /* Israel */
|
|
||||||
{"it", TZ, POS(14)}, /* Iran Time */
|
|
||||||
{"j", UNITS, DTK_JULIAN},
|
{"j", UNITS, DTK_JULIAN},
|
||||||
{"jan", MONTH, 1},
|
{"jan", MONTH, 1},
|
||||||
{"january", MONTH, 1},
|
{"january", MONTH, 1},
|
||||||
{"javt", TZ, POS(28)}, /* Java Time (07:00? see JT) */
|
|
||||||
{"jayt", TZ, POS(36)}, /* Jayapura Time (Indonesia) */
|
|
||||||
{"jd", UNITS, DTK_JULIAN},
|
{"jd", UNITS, DTK_JULIAN},
|
||||||
{"jst", TZ, POS(36)}, /* Japan Std Time,USSR Zone 8 */
|
|
||||||
{"jt", TZ, POS(30)}, /* Java Time (07:30? see JAVT) */
|
|
||||||
{"jul", MONTH, 7},
|
{"jul", MONTH, 7},
|
||||||
{"julian", UNITS, DTK_JULIAN},
|
{"julian", UNITS, DTK_JULIAN},
|
||||||
{"july", MONTH, 7},
|
{"july", MONTH, 7},
|
||||||
{"jun", MONTH, 6},
|
{"jun", MONTH, 6},
|
||||||
{"june", MONTH, 6},
|
{"june", MONTH, 6},
|
||||||
{"kdt", DTZ, POS(40)}, /* Korea Daylight Time */
|
|
||||||
{"kgst", DTZ, POS(24)}, /* Kyrgyzstan Summer Time */
|
|
||||||
{"kgt", TZ, POS(20)}, /* Kyrgyzstan Time */
|
|
||||||
{"kost", TZ, POS(48)}, /* Kosrae Time */
|
|
||||||
{"krast", DTZ, POS(28)}, /* Krasnoyarsk Summer Time */
|
|
||||||
{"krat", TZ, POS(32)}, /* Krasnoyarsk Standard Time */
|
|
||||||
{"kst", TZ, POS(36)}, /* Korea Standard Time */
|
|
||||||
{"lhdt", DTZ, POS(44)}, /* Lord Howe Daylight Time, Australia */
|
|
||||||
{"lhst", TZ, POS(42)}, /* Lord Howe Standard Time, Australia */
|
|
||||||
{"ligt", TZ, POS(40)}, /* From Melbourne, Australia */
|
|
||||||
{"lint", TZ, POS(56)}, /* Line Islands Time (Kiribati; +14 hours!) */
|
|
||||||
{"lkt", TZ, POS(24)}, /* Lanka Time */
|
|
||||||
{"m", UNITS, DTK_MONTH}, /* "month" for ISO input */
|
{"m", UNITS, DTK_MONTH}, /* "month" for ISO input */
|
||||||
{"magst", DTZ, POS(48)}, /* Magadan Summer Time */
|
|
||||||
{"magt", TZ, POS(44)}, /* Magadan Time */
|
|
||||||
{"mar", MONTH, 3},
|
{"mar", MONTH, 3},
|
||||||
{"march", MONTH, 3},
|
{"march", MONTH, 3},
|
||||||
{"mart", TZ, NEG(38)}, /* Marquesas Time */
|
|
||||||
{"mawt", TZ, POS(24)}, /* Mawson, Antarctica */
|
|
||||||
{"may", MONTH, 5},
|
{"may", MONTH, 5},
|
||||||
{"mdt", DTZ, NEG(24)}, /* Mountain Daylight Time */
|
|
||||||
{"mest", DTZ, POS(8)}, /* Middle Europe Summer Time */
|
|
||||||
{"met", TZ, POS(4)}, /* Middle Europe Time */
|
|
||||||
{"metdst", DTZ, POS(8)}, /* Middle Europe Daylight Time */
|
|
||||||
{"mewt", TZ, POS(4)}, /* Middle Europe Winter Time */
|
|
||||||
{"mez", TZ, POS(4)}, /* Middle Europe Zone */
|
|
||||||
{"mht", TZ, POS(48)}, /* Kwajalein */
|
|
||||||
{"mm", UNITS, DTK_MINUTE}, /* "minute" for ISO input */
|
{"mm", UNITS, DTK_MINUTE}, /* "minute" for ISO input */
|
||||||
{"mmt", TZ, POS(26)}, /* Myanmar Time */
|
|
||||||
{"mon", DOW, 1},
|
{"mon", DOW, 1},
|
||||||
{"monday", DOW, 1},
|
{"monday", DOW, 1},
|
||||||
#if 0
|
|
||||||
most
|
|
||||||
#endif
|
|
||||||
{"mpt", TZ, POS(40)}, /* North Mariana Islands Time */
|
|
||||||
{"msd", DTZ, POS(16)}, /* Moscow Summer Time */
|
|
||||||
{"msk", TZ, POS(12)}, /* Moscow Time */
|
|
||||||
{"mst", TZ, NEG(28)}, /* Mountain Standard Time */
|
|
||||||
{"mt", TZ, POS(34)}, /* Moluccas Time */
|
|
||||||
{"mut", TZ, POS(16)}, /* Mauritius Island Time */
|
|
||||||
{"mvt", TZ, POS(20)}, /* Maldives Island Time */
|
|
||||||
{"myt", TZ, POS(32)}, /* Malaysia Time */
|
|
||||||
#if 0
|
|
||||||
ncst
|
|
||||||
#endif
|
|
||||||
{"nct", TZ, POS(44)}, /* New Caledonia Time */
|
|
||||||
{"ndt", DTZ, NEG(10)}, /* Nfld. Daylight Time */
|
|
||||||
{"nft", TZ, NEG(14)}, /* Newfoundland Standard Time */
|
|
||||||
{"nor", TZ, POS(4)}, /* Norway Standard Time */
|
|
||||||
{"nov", MONTH, 11},
|
{"nov", MONTH, 11},
|
||||||
{"november", MONTH, 11},
|
{"november", MONTH, 11},
|
||||||
{"novst", DTZ, POS(28)}, /* Novosibirsk Summer Time */
|
|
||||||
{"novt", TZ, POS(24)}, /* Novosibirsk Standard Time */
|
|
||||||
{NOW, RESERV, DTK_NOW}, /* current transaction time */
|
{NOW, RESERV, DTK_NOW}, /* current transaction time */
|
||||||
{"npt", TZ, POS(23)}, /* Nepal Standard Time (GMT-5:45) */
|
|
||||||
{"nst", TZ, NEG(14)}, /* Nfld. Standard Time */
|
|
||||||
{"nt", TZ, NEG(44)}, /* Nome Time */
|
|
||||||
{"nut", TZ, NEG(44)}, /* Niue Time */
|
|
||||||
{"nzdt", DTZ, POS(52)}, /* New Zealand Daylight Time */
|
|
||||||
{"nzst", TZ, POS(48)}, /* New Zealand Standard Time */
|
|
||||||
{"nzt", TZ, POS(48)}, /* New Zealand Time */
|
|
||||||
{"oct", MONTH, 10},
|
{"oct", MONTH, 10},
|
||||||
{"october", MONTH, 10},
|
{"october", MONTH, 10},
|
||||||
{"omsst", DTZ, POS(28)}, /* Omsk Summer Time */
|
|
||||||
{"omst", TZ, POS(24)}, /* Omsk Time */
|
|
||||||
{"on", IGNORE_DTF, 0}, /* "on" (throwaway) */
|
{"on", IGNORE_DTF, 0}, /* "on" (throwaway) */
|
||||||
{"pdt", DTZ, NEG(28)}, /* Pacific Daylight Time */
|
|
||||||
#if 0
|
|
||||||
pest
|
|
||||||
#endif
|
|
||||||
{"pet", TZ, NEG(20)}, /* Peru Time */
|
|
||||||
{"petst", DTZ, POS(52)}, /* Petropavlovsk-Kamchatski Summer Time */
|
|
||||||
{"pett", TZ, POS(48)}, /* Petropavlovsk-Kamchatski Time */
|
|
||||||
{"pgt", TZ, POS(40)}, /* Papua New Guinea Time */
|
|
||||||
{"phot", TZ, POS(52)}, /* Phoenix Islands (Kiribati) Time */
|
|
||||||
#if 0
|
|
||||||
phst
|
|
||||||
#endif
|
|
||||||
{"pht", TZ, POS(32)}, /* Phillipine Time */
|
|
||||||
{"pkt", TZ, POS(20)}, /* Pakistan Time */
|
|
||||||
{"pm", AMPM, PM},
|
{"pm", AMPM, PM},
|
||||||
{"pmdt", DTZ, NEG(8)}, /* Pierre & Miquelon Daylight Time */
|
|
||||||
#if 0
|
|
||||||
pmst
|
|
||||||
#endif
|
|
||||||
{"pont", TZ, POS(44)}, /* Ponape Time (Micronesia) */
|
|
||||||
{"pst", TZ, NEG(32)}, /* Pacific Standard Time */
|
|
||||||
{"pwt", TZ, POS(36)}, /* Palau Time */
|
|
||||||
{"pyst", DTZ, NEG(12)}, /* Paraguay Summer Time */
|
|
||||||
{"pyt", TZ, NEG(16)}, /* Paraguay Time */
|
|
||||||
{"ret", DTZ, POS(16)}, /* Reunion Island Time */
|
|
||||||
{"s", UNITS, DTK_SECOND}, /* "seconds" for ISO input */
|
{"s", UNITS, DTK_SECOND}, /* "seconds" for ISO input */
|
||||||
{"sadt", DTZ, POS(42)}, /* S. Australian Dayl. Time */
|
|
||||||
#if 0
|
|
||||||
samst
|
|
||||||
samt
|
|
||||||
#endif
|
|
||||||
{"sast", TZ, POS(38)}, /* South Australian Std Time */
|
|
||||||
{"sat", DOW, 6},
|
{"sat", DOW, 6},
|
||||||
{"saturday", DOW, 6},
|
{"saturday", DOW, 6},
|
||||||
#if 0
|
|
||||||
sbt
|
|
||||||
#endif
|
|
||||||
{"sct", DTZ, POS(16)}, /* Mahe Island Time */
|
|
||||||
{"sep", MONTH, 9},
|
{"sep", MONTH, 9},
|
||||||
{"sept", MONTH, 9},
|
{"sept", MONTH, 9},
|
||||||
{"september", MONTH, 9},
|
{"september", MONTH, 9},
|
||||||
{"set", TZ, NEG(4)}, /* Seychelles Time ?? */
|
|
||||||
#if 0
|
|
||||||
sgt
|
|
||||||
#endif
|
|
||||||
{"sst", DTZ, POS(8)}, /* Swedish Summer Time */
|
|
||||||
{"sun", DOW, 0},
|
{"sun", DOW, 0},
|
||||||
{"sunday", DOW, 0},
|
{"sunday", DOW, 0},
|
||||||
{"swt", TZ, POS(4)}, /* Swedish Winter Time */
|
|
||||||
#if 0
|
|
||||||
syot
|
|
||||||
#endif
|
|
||||||
{"t", ISOTIME, DTK_TIME}, /* Filler for ISO time fields */
|
{"t", ISOTIME, DTK_TIME}, /* Filler for ISO time fields */
|
||||||
{"tft", TZ, POS(20)}, /* Kerguelen Time */
|
|
||||||
{"that", TZ, NEG(40)}, /* Tahiti Time */
|
|
||||||
{"thu", DOW, 4},
|
{"thu", DOW, 4},
|
||||||
{"thur", DOW, 4},
|
{"thur", DOW, 4},
|
||||||
{"thurs", DOW, 4},
|
{"thurs", DOW, 4},
|
||||||
{"thursday", DOW, 4},
|
{"thursday", DOW, 4},
|
||||||
{"tjt", TZ, POS(20)}, /* Tajikistan Time */
|
|
||||||
{"tkt", TZ, NEG(40)}, /* Tokelau Time */
|
|
||||||
{"tmt", TZ, POS(20)}, /* Turkmenistan Time */
|
|
||||||
{TODAY, RESERV, DTK_TODAY}, /* midnight */
|
{TODAY, RESERV, DTK_TODAY}, /* midnight */
|
||||||
{TOMORROW, RESERV, DTK_TOMORROW}, /* tomorrow midnight */
|
{TOMORROW, RESERV, DTK_TOMORROW}, /* tomorrow midnight */
|
||||||
#if 0
|
|
||||||
tost
|
|
||||||
#endif
|
|
||||||
{"tot", TZ, POS(52)}, /* Tonga Time */
|
|
||||||
#if 0
|
|
||||||
tpt
|
|
||||||
#endif
|
|
||||||
{"truk", TZ, POS(40)}, /* Truk Time */
|
|
||||||
{"tue", DOW, 2},
|
{"tue", DOW, 2},
|
||||||
{"tues", DOW, 2},
|
{"tues", DOW, 2},
|
||||||
{"tuesday", DOW, 2},
|
{"tuesday", DOW, 2},
|
||||||
{"tvt", TZ, POS(48)}, /* Tuvalu Time */
|
|
||||||
#if 0
|
|
||||||
uct
|
|
||||||
#endif
|
|
||||||
{"ulast", DTZ, POS(36)}, /* Ulan Bator Summer Time */
|
|
||||||
{"ulat", TZ, POS(32)}, /* Ulan Bator Time */
|
|
||||||
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
|
{"undefined", RESERV, DTK_INVALID}, /* pre-v6.1 invalid time */
|
||||||
{"ut", TZ, POS(0)},
|
|
||||||
{"utc", TZ, POS(0)},
|
|
||||||
{"uyst", DTZ, NEG(8)}, /* Uruguay Summer Time */
|
|
||||||
{"uyt", TZ, NEG(12)}, /* Uruguay Time */
|
|
||||||
{"uzst", DTZ, POS(24)}, /* Uzbekistan Summer Time */
|
|
||||||
{"uzt", TZ, POS(20)}, /* Uzbekistan Time */
|
|
||||||
{"vet", TZ, NEG(16)}, /* Venezuela Time */
|
|
||||||
{"vlast", DTZ, POS(44)}, /* Vladivostok Summer Time */
|
|
||||||
{"vlat", TZ, POS(40)}, /* Vladivostok Time */
|
|
||||||
#if 0
|
|
||||||
vust
|
|
||||||
#endif
|
|
||||||
{"vut", TZ, POS(44)}, /* Vanuata Time */
|
|
||||||
{"wadt", DTZ, POS(32)}, /* West Australian DST */
|
|
||||||
{"wakt", TZ, POS(48)}, /* Wake Time */
|
|
||||||
#if 0
|
|
||||||
warst
|
|
||||||
#endif
|
|
||||||
{"wast", TZ, POS(28)}, /* West Australian Std Time */
|
|
||||||
{"wat", TZ, NEG(4)}, /* West Africa Time */
|
|
||||||
{"wdt", DTZ, POS(36)}, /* West Australian DST */
|
|
||||||
{"wed", DOW, 3},
|
{"wed", DOW, 3},
|
||||||
{"wednesday", DOW, 3},
|
{"wednesday", DOW, 3},
|
||||||
{"weds", DOW, 3},
|
{"weds", DOW, 3},
|
||||||
{"west", DTZ, POS(4)}, /* Western Europe Summer Time */
|
|
||||||
{"wet", TZ, POS(0)}, /* Western Europe */
|
|
||||||
{"wetdst", DTZ, POS(4)}, /* Western Europe Daylight Savings Time */
|
|
||||||
{"wft", TZ, POS(48)}, /* Wallis and Futuna Time */
|
|
||||||
{"wgst", DTZ, NEG(8)}, /* West Greenland Summer Time */
|
|
||||||
{"wgt", TZ, NEG(12)}, /* West Greenland Time */
|
|
||||||
{"wst", TZ, POS(32)}, /* West Australian Standard Time */
|
|
||||||
{"y", UNITS, DTK_YEAR}, /* "year" for ISO input */
|
{"y", UNITS, DTK_YEAR}, /* "year" for ISO input */
|
||||||
{"yakst", DTZ, POS(40)}, /* Yakutsk Summer Time */
|
|
||||||
{"yakt", TZ, POS(36)}, /* Yakutsk Time */
|
|
||||||
{"yapt", TZ, POS(40)}, /* Yap Time (Micronesia) */
|
|
||||||
{"ydt", DTZ, NEG(32)}, /* Yukon Daylight Time */
|
|
||||||
{"yekst", DTZ, POS(24)}, /* Yekaterinburg Summer Time */
|
|
||||||
{"yekt", TZ, POS(20)}, /* Yekaterinburg Time */
|
|
||||||
{YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
|
{YESTERDAY, RESERV, DTK_YESTERDAY}, /* yesterday midnight */
|
||||||
{"yst", TZ, NEG(36)}, /* Yukon Standard Time */
|
|
||||||
{"z", TZ, POS(0)}, /* time zone tag per ISO-8601 */
|
|
||||||
{"zp4", TZ, NEG(16)}, /* UTC +4 hours. */
|
|
||||||
{"zp5", TZ, NEG(20)}, /* UTC +5 hours. */
|
|
||||||
{"zp6", TZ, NEG(24)}, /* UTC +6 hours. */
|
|
||||||
{ZULU, TZ, POS(0)}, /* UTC */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
|
static int szdatetktbl = sizeof datetktbl / sizeof datetktbl[0];
|
||||||
|
|
||||||
/* Used for SET australian_timezones to override North American ones */
|
|
||||||
static datetkn australian_datetktbl[] = {
|
|
||||||
{"acst", TZ, POS(38)}, /* Cent. Australia */
|
|
||||||
{"cst", TZ, POS(42)}, /* Australia Central Std Time */
|
|
||||||
{"east", TZ, POS(40)}, /* East Australian Std Time */
|
|
||||||
{"est", TZ, POS(40)}, /* Australia Eastern Std Time */
|
|
||||||
{"sat", TZ, POS(38)},
|
|
||||||
};
|
|
||||||
|
|
||||||
static unsigned int australian_szdatetktbl = sizeof australian_datetktbl /
|
|
||||||
sizeof australian_datetktbl[0];
|
|
||||||
|
|
||||||
static datetkn deltatktbl[] = {
|
static datetkn deltatktbl[] = {
|
||||||
/* text, token, lexval */
|
/* text, token, lexval */
|
||||||
@ -576,11 +246,11 @@ static datetkn deltatktbl[] = {
|
|||||||
{"yrs", UNITS, DTK_YEAR}, /* "years" relative */
|
{"yrs", UNITS, DTK_YEAR}, /* "years" relative */
|
||||||
};
|
};
|
||||||
|
|
||||||
static unsigned int szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0];
|
static int szdeltatktbl = sizeof deltatktbl / sizeof deltatktbl[0];
|
||||||
|
|
||||||
static datetkn *datecache[MAXDATEFIELDS] = {NULL};
|
static const datetkn *datecache[MAXDATEFIELDS] = {NULL};
|
||||||
|
|
||||||
static datetkn *deltacache[MAXDATEFIELDS] = {NULL};
|
static const datetkn *deltacache[MAXDATEFIELDS] = {NULL};
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -2998,21 +2668,15 @@ int
|
|||||||
DecodeSpecial(int field, char *lowtoken, int *val)
|
DecodeSpecial(int field, char *lowtoken, int *val)
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
datetkn *tp;
|
const datetkn *tp;
|
||||||
|
|
||||||
if (datecache[field] != NULL &&
|
tp = datecache[field];
|
||||||
strncmp(lowtoken, datecache[field]->token, TOKMAXLEN) == 0)
|
if (tp == NULL || strncmp(lowtoken, tp->token, TOKMAXLEN) != 0)
|
||||||
tp = datecache[field];
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
tp = NULL;
|
tp = datebsearch(lowtoken, timezonetktbl, sztimezonetktbl);
|
||||||
if (Australian_timezones)
|
if (tp == NULL)
|
||||||
tp = datebsearch(lowtoken, australian_datetktbl,
|
|
||||||
australian_szdatetktbl);
|
|
||||||
if (!tp)
|
|
||||||
tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
|
tp = datebsearch(lowtoken, datetktbl, szdatetktbl);
|
||||||
}
|
}
|
||||||
datecache[field] = tp;
|
|
||||||
if (tp == NULL)
|
if (tp == NULL)
|
||||||
{
|
{
|
||||||
type = UNKNOWN_FIELD;
|
type = UNKNOWN_FIELD;
|
||||||
@ -3020,6 +2684,7 @@ DecodeSpecial(int field, char *lowtoken, int *val)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
datecache[field] = tp;
|
||||||
type = tp->type;
|
type = tp->type;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
@ -3391,20 +3056,20 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm,
|
|||||||
|
|
||||||
/* DecodeUnits()
|
/* DecodeUnits()
|
||||||
* Decode text string using lookup table.
|
* Decode text string using lookup table.
|
||||||
* This routine supports time interval decoding.
|
* This routine supports time interval decoding
|
||||||
|
* (hence, it need not recognize timezone names).
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
DecodeUnits(int field, char *lowtoken, int *val)
|
DecodeUnits(int field, char *lowtoken, int *val)
|
||||||
{
|
{
|
||||||
int type;
|
int type;
|
||||||
datetkn *tp;
|
const datetkn *tp;
|
||||||
|
|
||||||
if (deltacache[field] != NULL &&
|
tp = deltacache[field];
|
||||||
strncmp(lowtoken, deltacache[field]->token, TOKMAXLEN) == 0)
|
if (tp == NULL || strncmp(lowtoken, tp->token, TOKMAXLEN) != 0)
|
||||||
tp = deltacache[field];
|
{
|
||||||
else
|
|
||||||
tp = datebsearch(lowtoken, deltatktbl, szdeltatktbl);
|
tp = datebsearch(lowtoken, deltatktbl, szdeltatktbl);
|
||||||
deltacache[field] = tp;
|
}
|
||||||
if (tp == NULL)
|
if (tp == NULL)
|
||||||
{
|
{
|
||||||
type = UNKNOWN_FIELD;
|
type = UNKNOWN_FIELD;
|
||||||
@ -3412,6 +3077,7 @@ DecodeUnits(int field, char *lowtoken, int *val)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
deltacache[field] = tp;
|
||||||
type = tp->type;
|
type = tp->type;
|
||||||
if (type == TZ || type == DTZ)
|
if (type == TZ || type == DTZ)
|
||||||
*val = FROMVAL(tp);
|
*val = FROMVAL(tp);
|
||||||
@ -3477,10 +3143,10 @@ DateTimeParseError(int dterr, const char *str, const char *datatype)
|
|||||||
* Binary search -- from Knuth (6.2.1) Algorithm B. Special case like this
|
* Binary search -- from Knuth (6.2.1) Algorithm B. Special case like this
|
||||||
* is WAY faster than the generic bsearch().
|
* is WAY faster than the generic bsearch().
|
||||||
*/
|
*/
|
||||||
static datetkn *
|
static const datetkn *
|
||||||
datebsearch(char *key, datetkn *base, unsigned int nel)
|
datebsearch(const char *key, const datetkn *base, int nel)
|
||||||
{
|
{
|
||||||
datetkn *last = base + nel - 1,
|
const datetkn *last = base + nel - 1,
|
||||||
*position;
|
*position;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
@ -4082,30 +3748,15 @@ EncodeInterval(struct pg_tm * tm, fsec_t fsec, int style, char *str)
|
|||||||
} /* EncodeInterval() */
|
} /* EncodeInterval() */
|
||||||
|
|
||||||
|
|
||||||
/* GUC assign_hook for australian_timezones */
|
|
||||||
bool
|
|
||||||
ClearDateCache(bool newval, bool doit, GucSource source)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (doit)
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAXDATEFIELDS; i++)
|
|
||||||
datecache[i] = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We've been burnt by stupid errors in the ordering of the datetkn tables
|
* We've been burnt by stupid errors in the ordering of the datetkn tables
|
||||||
* once too often. Arrange to check them during postmaster start.
|
* once too often. Arrange to check them during postmaster start.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
CheckDateTokenTable(const char *tablename, datetkn *base, unsigned int nel)
|
CheckDateTokenTable(const char *tablename, const datetkn *base, int nel)
|
||||||
{
|
{
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
unsigned int i;
|
int i;
|
||||||
|
|
||||||
for (i = 1; i < nel; i++)
|
for (i = 1; i < nel; i++)
|
||||||
{
|
{
|
||||||
@ -4131,8 +3782,135 @@ CheckDateTokenTables(void)
|
|||||||
|
|
||||||
ok &= CheckDateTokenTable("datetktbl", datetktbl, szdatetktbl);
|
ok &= CheckDateTokenTable("datetktbl", datetktbl, szdatetktbl);
|
||||||
ok &= CheckDateTokenTable("deltatktbl", deltatktbl, szdeltatktbl);
|
ok &= CheckDateTokenTable("deltatktbl", deltatktbl, szdeltatktbl);
|
||||||
ok &= CheckDateTokenTable("australian_datetktbl",
|
|
||||||
australian_datetktbl,
|
|
||||||
australian_szdatetktbl);
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function gets called during timezone config file load or reload
|
||||||
|
* to create the final array of timezone tokens. The argument array
|
||||||
|
* is already sorted in name order. This data is in a temporary memory
|
||||||
|
* context and must be copied to somewhere permanent.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
InstallTimeZoneAbbrevs(tzEntry *abbrevs, int n)
|
||||||
|
{
|
||||||
|
datetkn *newtbl;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copy the data into TopMemoryContext and convert to datetkn format.
|
||||||
|
*/
|
||||||
|
newtbl = (datetkn *) MemoryContextAlloc(TopMemoryContext,
|
||||||
|
n * sizeof(datetkn));
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
strncpy(newtbl[i].token, abbrevs[i].abbrev, TOKMAXLEN);
|
||||||
|
newtbl[i].type = abbrevs[i].is_dst ? DTZ : TZ;
|
||||||
|
TOVAL(&newtbl[i], abbrevs[i].offset / 60);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check the ordering, if testing */
|
||||||
|
Assert(CheckDateTokenTable("timezone offset", newtbl, n));
|
||||||
|
|
||||||
|
/* Now safe to replace existing table (if any) */
|
||||||
|
if (timezonetktbl)
|
||||||
|
pfree(timezonetktbl);
|
||||||
|
timezonetktbl = newtbl;
|
||||||
|
sztimezonetktbl = n;
|
||||||
|
|
||||||
|
/* clear date cache in case it contains any stale timezone names */
|
||||||
|
for (i = 0; i < MAXDATEFIELDS; i++)
|
||||||
|
datecache[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This set-returning function reads all the available time zone abbreviations
|
||||||
|
* and returns a set of (name, utc_offset, is_dst).
|
||||||
|
*/
|
||||||
|
Datum
|
||||||
|
pg_timezonenames(PG_FUNCTION_ARGS)
|
||||||
|
{
|
||||||
|
FuncCallContext *funcctx;
|
||||||
|
int *pindex;
|
||||||
|
Datum result;
|
||||||
|
Interval *resInterval;
|
||||||
|
HeapTuple tuple;
|
||||||
|
Datum values[3];
|
||||||
|
bool nulls[3];
|
||||||
|
char buffer[TOKMAXLEN + 1];
|
||||||
|
unsigned char *p;
|
||||||
|
struct pg_tm tm;
|
||||||
|
|
||||||
|
/* stuff done only on the first call of the function */
|
||||||
|
if (SRF_IS_FIRSTCALL())
|
||||||
|
{
|
||||||
|
TupleDesc tupdesc;
|
||||||
|
MemoryContext oldcontext;
|
||||||
|
|
||||||
|
/* create a function context for cross-call persistence */
|
||||||
|
funcctx = SRF_FIRSTCALL_INIT();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* switch to memory context appropriate for multiple function
|
||||||
|
* calls
|
||||||
|
*/
|
||||||
|
oldcontext = MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);
|
||||||
|
|
||||||
|
/* allocate memory for user context */
|
||||||
|
pindex = (int *) palloc(sizeof(int));
|
||||||
|
*pindex = 0;
|
||||||
|
funcctx->user_fctx = (void *) pindex;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* build tupdesc for result tuples. This must match the
|
||||||
|
* definition of the pg_timezonenames view in system_views.sql
|
||||||
|
*/
|
||||||
|
tupdesc = CreateTemplateTupleDesc(3, false);
|
||||||
|
TupleDescInitEntry(tupdesc, (AttrNumber) 1, "name",
|
||||||
|
TEXTOID, -1, 0);
|
||||||
|
TupleDescInitEntry(tupdesc, (AttrNumber) 2, "utc_offset",
|
||||||
|
INTERVALOID, -1, 0);
|
||||||
|
TupleDescInitEntry(tupdesc, (AttrNumber) 3, "is_dst",
|
||||||
|
BOOLOID, -1, 0);
|
||||||
|
|
||||||
|
funcctx->tuple_desc = BlessTupleDesc(tupdesc);
|
||||||
|
MemoryContextSwitchTo(oldcontext);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* stuff done on every call of the function */
|
||||||
|
funcctx = SRF_PERCALL_SETUP();
|
||||||
|
pindex = (int *) funcctx->user_fctx;
|
||||||
|
|
||||||
|
if (*pindex >= sztimezonetktbl)
|
||||||
|
SRF_RETURN_DONE(funcctx);
|
||||||
|
|
||||||
|
MemSet(nulls, 0, sizeof(nulls));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert name to text, using upcasing conversion that is the inverse
|
||||||
|
* of what ParseDateTime() uses.
|
||||||
|
*/
|
||||||
|
strncpy(buffer, timezonetktbl[*pindex].token, TOKMAXLEN);
|
||||||
|
buffer[TOKMAXLEN] = '\0'; /* may not be null-terminated */
|
||||||
|
for (p = (unsigned char *) buffer; *p; p++)
|
||||||
|
*p = pg_toupper(*p);
|
||||||
|
|
||||||
|
values[0] = DirectFunctionCall1(textin, CStringGetDatum(buffer));
|
||||||
|
|
||||||
|
MemSet(&tm, 0, sizeof(struct pg_tm));
|
||||||
|
tm.tm_min = (-1) * FROMVAL(&timezonetktbl[*pindex]);
|
||||||
|
resInterval = (Interval *) palloc(sizeof(Interval));
|
||||||
|
tm2interval(&tm, 0, resInterval);
|
||||||
|
values[1] = IntervalPGetDatum(resInterval);
|
||||||
|
|
||||||
|
Assert(timezonetktbl[*pindex].type == DTZ ||
|
||||||
|
timezonetktbl[*pindex].type == TZ);
|
||||||
|
values[2] = BoolGetDatum(timezonetktbl[*pindex].type == DTZ);
|
||||||
|
|
||||||
|
(*pindex)++;
|
||||||
|
|
||||||
|
tuple = heap_form_tuple(funcctx->tuple_desc, values, nulls);
|
||||||
|
result = HeapTupleGetDatum(tuple);
|
||||||
|
|
||||||
|
SRF_RETURN_NEXT(funcctx, result);
|
||||||
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# Makefile for utils/misc
|
# Makefile for utils/misc
|
||||||
#
|
#
|
||||||
# IDENTIFICATION
|
# IDENTIFICATION
|
||||||
# $PostgreSQL: pgsql/src/backend/utils/misc/Makefile,v 1.25 2006/03/07 01:03:12 tgl Exp $
|
# $PostgreSQL: pgsql/src/backend/utils/misc/Makefile,v 1.26 2006/07/25 03:51:21 tgl Exp $
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
|
|||||||
|
|
||||||
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
|
override CPPFLAGS := -I$(srcdir) $(CPPFLAGS)
|
||||||
|
|
||||||
OBJS = guc.o help_config.o pg_rusage.o ps_status.o superuser.o
|
OBJS = guc.o help_config.o pg_rusage.o ps_status.o superuser.o tzparser.o
|
||||||
|
|
||||||
# This location might depend on the installation directories. Therefore
|
# This location might depend on the installation directories. Therefore
|
||||||
# we can't subsitute it into pg_config.h.
|
# we can't subsitute it into pg_config.h.
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.328 2006/07/14 14:52:25 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.329 2006/07/25 03:51:21 tgl Exp $
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------
|
*--------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -26,6 +26,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include "access/gin.h"
|
||||||
#include "access/twophase.h"
|
#include "access/twophase.h"
|
||||||
#include "access/xact.h"
|
#include "access/xact.h"
|
||||||
#include "catalog/namespace.h"
|
#include "catalog/namespace.h"
|
||||||
@ -57,7 +58,7 @@
|
|||||||
#include "utils/memutils.h"
|
#include "utils/memutils.h"
|
||||||
#include "utils/pg_locale.h"
|
#include "utils/pg_locale.h"
|
||||||
#include "utils/ps_status.h"
|
#include "utils/ps_status.h"
|
||||||
#include "access/gin.h"
|
#include "utils/tzparser.h"
|
||||||
|
|
||||||
#ifndef PG_KRB_SRVTAB
|
#ifndef PG_KRB_SRVTAB
|
||||||
#define PG_KRB_SRVTAB ""
|
#define PG_KRB_SRVTAB ""
|
||||||
@ -131,6 +132,7 @@ static bool assign_log_stats(bool newval, bool doit, GucSource source);
|
|||||||
static bool assign_transaction_read_only(bool newval, bool doit, GucSource source);
|
static bool assign_transaction_read_only(bool newval, bool doit, GucSource source);
|
||||||
static const char *assign_canonical_path(const char *newval, bool doit, GucSource source);
|
static const char *assign_canonical_path(const char *newval, bool doit, GucSource source);
|
||||||
static const char *assign_backslash_quote(const char *newval, bool doit, GucSource source);
|
static const char *assign_backslash_quote(const char *newval, bool doit, GucSource source);
|
||||||
|
static const char *assign_timezone_abbreviations(const char *newval, bool doit, GucSource source);
|
||||||
|
|
||||||
static bool assign_tcp_keepalives_idle(int newval, bool doit, GucSource source);
|
static bool assign_tcp_keepalives_idle(int newval, bool doit, GucSource source);
|
||||||
static bool assign_tcp_keepalives_interval(int newval, bool doit, GucSource source);
|
static bool assign_tcp_keepalives_interval(int newval, bool doit, GucSource source);
|
||||||
@ -163,8 +165,6 @@ bool log_btree_build_stats = false;
|
|||||||
|
|
||||||
bool SQL_inheritance = true;
|
bool SQL_inheritance = true;
|
||||||
|
|
||||||
bool Australian_timezones = false;
|
|
||||||
|
|
||||||
bool Password_encryption = true;
|
bool Password_encryption = true;
|
||||||
|
|
||||||
bool default_with_oids = false;
|
bool default_with_oids = false;
|
||||||
@ -216,6 +216,7 @@ static char *timezone_string;
|
|||||||
static char *XactIsoLevel_string;
|
static char *XactIsoLevel_string;
|
||||||
static char *data_directory;
|
static char *data_directory;
|
||||||
static char *custom_variable_classes;
|
static char *custom_variable_classes;
|
||||||
|
static char *timezone_abbreviations;
|
||||||
static int max_function_args;
|
static int max_function_args;
|
||||||
static int max_index_keys;
|
static int max_index_keys;
|
||||||
static int max_identifier_length;
|
static int max_identifier_length;
|
||||||
@ -806,15 +807,6 @@ static struct config_bool ConfigureNamesBool[] =
|
|||||||
&SQL_inheritance,
|
&SQL_inheritance,
|
||||||
true, NULL, NULL
|
true, NULL, NULL
|
||||||
},
|
},
|
||||||
{
|
|
||||||
{"australian_timezones", PGC_USERSET, CLIENT_CONN_LOCALE,
|
|
||||||
gettext_noop("Interprets ACST, CST, EST, and SAT as Australian time zones."),
|
|
||||||
gettext_noop("Otherwise they are interpreted as North/South American "
|
|
||||||
"time zones and Saturday.")
|
|
||||||
},
|
|
||||||
&Australian_timezones,
|
|
||||||
false, ClearDateCache, NULL
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
{"password_encryption", PGC_USERSET, CONN_AUTH_SECURITY,
|
{"password_encryption", PGC_USERSET, CONN_AUTH_SECURITY,
|
||||||
gettext_noop("Encrypt passwords."),
|
gettext_noop("Encrypt passwords."),
|
||||||
@ -2077,6 +2069,14 @@ static struct config_string ConfigureNamesString[] =
|
|||||||
&timezone_string,
|
&timezone_string,
|
||||||
"UNKNOWN", assign_timezone, show_timezone
|
"UNKNOWN", assign_timezone, show_timezone
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
{"timezone_abbreviations", PGC_USERSET, CLIENT_CONN_LOCALE,
|
||||||
|
gettext_noop("Selects a file of timezone abbreviations"),
|
||||||
|
NULL,
|
||||||
|
},
|
||||||
|
&timezone_abbreviations,
|
||||||
|
"Default", assign_timezone_abbreviations, NULL
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
{"transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
|
{"transaction_isolation", PGC_USERSET, CLIENT_CONN_STATEMENT,
|
||||||
@ -6101,6 +6101,30 @@ assign_backslash_quote(const char *newval, bool doit, GucSource source)
|
|||||||
return newval;
|
return newval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *
|
||||||
|
assign_timezone_abbreviations(const char *newval, bool doit, GucSource source)
|
||||||
|
{
|
||||||
|
/* Loading abbrev file is expensive, so only do it when value changes */
|
||||||
|
if (timezone_abbreviations == NULL ||
|
||||||
|
strcmp(timezone_abbreviations, newval) != 0)
|
||||||
|
{
|
||||||
|
int elevel;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If reading config file, only the postmaster should bleat loudly
|
||||||
|
* about problems. Otherwise, it's just this one process doing it,
|
||||||
|
* and we use WARNING message level.
|
||||||
|
*/
|
||||||
|
if (source == PGC_S_FILE)
|
||||||
|
elevel = IsUnderPostmaster ? DEBUG2 : LOG;
|
||||||
|
else
|
||||||
|
elevel = WARNING;
|
||||||
|
if (!load_tzoffsets(newval, doit, elevel))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return newval;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
assign_tcp_keepalives_idle(int newval, bool doit, GucSource source)
|
assign_tcp_keepalives_idle(int newval, bool doit, GucSource source)
|
||||||
{
|
{
|
||||||
|
@ -397,7 +397,13 @@
|
|||||||
#datestyle = 'iso, mdy'
|
#datestyle = 'iso, mdy'
|
||||||
#timezone = unknown # actually, defaults to TZ
|
#timezone = unknown # actually, defaults to TZ
|
||||||
# environment setting
|
# environment setting
|
||||||
#australian_timezones = off
|
#timezone_abbreviations = 'Default' # select the set of available timezone
|
||||||
|
# abbreviations. Currently, there are
|
||||||
|
# Default
|
||||||
|
# Australia
|
||||||
|
# India
|
||||||
|
# However you can also create your own
|
||||||
|
# file in share/timezonesets/.
|
||||||
#extra_float_digits = 0 # min -15, max 2
|
#extra_float_digits = 0 # min -15, max 2
|
||||||
#client_encoding = sql_ascii # actually, defaults to database
|
#client_encoding = sql_ascii # actually, defaults to database
|
||||||
# encoding
|
# encoding
|
||||||
|
461
src/backend/utils/misc/tzparser.c
Normal file
461
src/backend/utils/misc/tzparser.c
Normal file
@ -0,0 +1,461 @@
|
|||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* tzparser.c
|
||||||
|
* Functions for parsing timezone offset files
|
||||||
|
*
|
||||||
|
* Note: we generally should not throw any errors in this file, but instead
|
||||||
|
* try to return an error code. This is not completely bulletproof at
|
||||||
|
* present --- in particular out-of-memory will throw an error. Could
|
||||||
|
* probably fix with PG_TRY if necessary.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
|
*
|
||||||
|
* IDENTIFICATION
|
||||||
|
* $PostgreSQL: pgsql/src/backend/utils/misc/tzparser.c,v 1.1 2006/07/25 03:51:21 tgl Exp $
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "postgres.h"
|
||||||
|
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#include "miscadmin.h"
|
||||||
|
#include "storage/fd.h"
|
||||||
|
#include "utils/datetime.h"
|
||||||
|
#include "utils/memutils.h"
|
||||||
|
#include "utils/tzparser.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define WHITESPACE " \t\n\r"
|
||||||
|
|
||||||
|
static int tz_elevel; /* to avoid passing this around a lot */
|
||||||
|
|
||||||
|
static bool validateTzEntry(tzEntry *tzentry);
|
||||||
|
static bool splitTzLine(const char *filename, int lineno,
|
||||||
|
char *line, tzEntry *tzentry);
|
||||||
|
static int addToArray(tzEntry **base, int *arraysize, int n,
|
||||||
|
tzEntry *entry, bool override);
|
||||||
|
static int ParseTzFile(const char *filename, int depth,
|
||||||
|
tzEntry **base, int *arraysize, int n);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Apply additional validation checks to a tzEntry
|
||||||
|
*
|
||||||
|
* Returns TRUE if OK, else false
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
validateTzEntry(tzEntry *tzentry)
|
||||||
|
{
|
||||||
|
unsigned char *p;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check restrictions imposed by datetkntbl storage format (see datetime.c)
|
||||||
|
*/
|
||||||
|
if (strlen(tzentry->abbrev) > TOKMAXLEN)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("time zone abbreviation \"%s\" is too long (maximum %d characters) in time zone file \"%s\", line %d",
|
||||||
|
tzentry->abbrev, TOKMAXLEN,
|
||||||
|
tzentry->filename, tzentry->lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (tzentry->offset % 900 != 0)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("time zone offset %d is not a multiple of 900 sec (15 min) in time zone file \"%s\", line %d",
|
||||||
|
tzentry->offset,
|
||||||
|
tzentry->filename, tzentry->lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sanity-check the offset: shouldn't exceed 14 hours
|
||||||
|
*/
|
||||||
|
if (tzentry->offset > 14*60*60 ||
|
||||||
|
tzentry->offset < -14*60*60)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("time zone offset %d is out of range in time zone file \"%s\", line %d",
|
||||||
|
tzentry->offset,
|
||||||
|
tzentry->filename, tzentry->lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert abbrev to lowercase (must match datetime.c's conversion)
|
||||||
|
*/
|
||||||
|
for (p = (unsigned char *) tzentry->abbrev; *p; p++)
|
||||||
|
*p = pg_tolower(*p);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attempt to parse the line as a timezone abbrev spec (name, offset, dst)
|
||||||
|
*
|
||||||
|
* Returns TRUE if OK, else false; data is stored in *tzentry
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
splitTzLine(const char *filename, int lineno, char *line, tzEntry *tzentry)
|
||||||
|
{
|
||||||
|
char *abbrev;
|
||||||
|
char *offset;
|
||||||
|
char *offset_endptr;
|
||||||
|
char *remain;
|
||||||
|
char *is_dst;
|
||||||
|
|
||||||
|
tzentry->lineno = lineno;
|
||||||
|
tzentry->filename = filename;
|
||||||
|
|
||||||
|
abbrev = strtok(line, WHITESPACE);
|
||||||
|
if (!abbrev)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("missing time zone abbreviation in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tzentry->abbrev = abbrev;
|
||||||
|
|
||||||
|
offset = strtok(NULL, WHITESPACE);
|
||||||
|
if (!offset)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("missing time zone offset in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
tzentry->offset = strtol(offset, &offset_endptr, 10);
|
||||||
|
if (offset_endptr == offset || *offset_endptr != '\0')
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("invalid number for time zone offset in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
is_dst = strtok(NULL, WHITESPACE);
|
||||||
|
if (is_dst && pg_strcasecmp(is_dst, "D") == 0)
|
||||||
|
{
|
||||||
|
tzentry->is_dst = true;
|
||||||
|
remain = strtok(NULL, WHITESPACE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* there was no 'D' dst specifier */
|
||||||
|
tzentry->is_dst = false;
|
||||||
|
remain = is_dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!remain) /* no more non-whitespace chars */
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (remain[0] != '#') /* must be a comment */
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("invalid syntax in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Insert entry into sorted array
|
||||||
|
*
|
||||||
|
* *base: base address of array (changeable if must enlarge array)
|
||||||
|
* *arraysize: allocated length of array (changeable if must enlarge array)
|
||||||
|
* n: current number of valid elements in array
|
||||||
|
* entry: new data to insert
|
||||||
|
* override: TRUE if OK to override
|
||||||
|
*
|
||||||
|
* Returns the new array length (new value for n), or -1 if error
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
addToArray(tzEntry **base, int *arraysize, int n,
|
||||||
|
tzEntry *entry, bool override)
|
||||||
|
{
|
||||||
|
tzEntry* arrayptr;
|
||||||
|
int low;
|
||||||
|
int high;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Search the array for a duplicate; as a useful side effect, the array
|
||||||
|
* is maintained in sorted order. We use strcmp() to ensure we match
|
||||||
|
* the sort order datetime.c expects.
|
||||||
|
*/
|
||||||
|
arrayptr = *base;
|
||||||
|
low = 0;
|
||||||
|
high = n-1;
|
||||||
|
while (low <= high)
|
||||||
|
{
|
||||||
|
int mid = (low + high) >> 1;
|
||||||
|
tzEntry *midptr = arrayptr + mid;
|
||||||
|
int cmp;
|
||||||
|
|
||||||
|
cmp = strcmp(entry->abbrev, midptr->abbrev);
|
||||||
|
if (cmp < 0)
|
||||||
|
high = mid - 1;
|
||||||
|
else if (cmp > 0)
|
||||||
|
low = mid + 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Found a duplicate entry; complain unless it's the same.
|
||||||
|
*/
|
||||||
|
if (midptr->offset == entry->offset &&
|
||||||
|
midptr->is_dst == entry->is_dst)
|
||||||
|
{
|
||||||
|
/* return unchanged array */
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
if (override)
|
||||||
|
{
|
||||||
|
/* same abbrev but something is different, override */
|
||||||
|
midptr->offset = entry->offset;
|
||||||
|
midptr->is_dst = entry->is_dst;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
/* same abbrev but something is different, complain */
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("time zone abbreviation \"%s\" is multiply defined",
|
||||||
|
entry->abbrev),
|
||||||
|
errdetail("Time zone file \"%s\", line %d conflicts with file \"%s\", line %d.",
|
||||||
|
midptr->filename, midptr->lineno,
|
||||||
|
entry->filename, entry->lineno)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* No match, insert at position "low".
|
||||||
|
*/
|
||||||
|
if (n >= *arraysize)
|
||||||
|
{
|
||||||
|
*arraysize *= 2;
|
||||||
|
*base = (tzEntry *) repalloc(*base, *arraysize * sizeof(tzEntry));
|
||||||
|
}
|
||||||
|
|
||||||
|
arrayptr = *base + low;
|
||||||
|
|
||||||
|
memmove(arrayptr + 1, arrayptr, (n - low) * sizeof(tzEntry));
|
||||||
|
|
||||||
|
memcpy(arrayptr, entry, sizeof(tzEntry));
|
||||||
|
|
||||||
|
/* Must dup the abbrev to ensure it survives */
|
||||||
|
arrayptr->abbrev = pstrdup(entry->abbrev);
|
||||||
|
|
||||||
|
return n+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Parse a single timezone abbrev file --- can recurse to handle @INCLUDE
|
||||||
|
*
|
||||||
|
* filename: user-specified file name (does not include path)
|
||||||
|
* depth: current recursion depth
|
||||||
|
* *base: array for results (changeable if must enlarge array)
|
||||||
|
* *arraysize: allocated length of array (changeable if must enlarge array)
|
||||||
|
* n: current number of valid elements in array
|
||||||
|
*
|
||||||
|
* Returns the new array length (new value for n), or -1 if error
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
ParseTzFile(const char *filename, int depth,
|
||||||
|
tzEntry **base, int *arraysize, int n)
|
||||||
|
{
|
||||||
|
char share_path[MAXPGPATH];
|
||||||
|
char file_path[MAXPGPATH];
|
||||||
|
FILE *tzFile;
|
||||||
|
char tzbuf[1024];
|
||||||
|
char *line;
|
||||||
|
tzEntry tzentry;
|
||||||
|
int lineno = 0;
|
||||||
|
bool override = false;
|
||||||
|
const char *p;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We enforce that the filename is all alpha characters. This may be
|
||||||
|
* overly restrictive, but we don't want to allow access to anything
|
||||||
|
* outside the timezonesets directory, so for instance '/' *must* be
|
||||||
|
* rejected.
|
||||||
|
*/
|
||||||
|
for (p = filename; *p; p++)
|
||||||
|
{
|
||||||
|
if (!isalpha((unsigned char) *p))
|
||||||
|
{
|
||||||
|
/* at level 0, we need no ereport since guc.c will say enough */
|
||||||
|
if (depth > 0)
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("invalid time zone file name \"%s\"",
|
||||||
|
filename)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The maximal recursion depth is a pretty arbitrary setting.
|
||||||
|
* It is hard to imagine that someone needs more than 3 levels so stick
|
||||||
|
* with this conservative setting until someone complains.
|
||||||
|
*/
|
||||||
|
if (depth > 3)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("time zone file recursion limit exceeded in file \"%s\"",
|
||||||
|
filename)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
get_share_path(my_exec_path, share_path);
|
||||||
|
snprintf(file_path, sizeof(file_path), "%s/timezonesets/%s",
|
||||||
|
share_path, filename);
|
||||||
|
tzFile = AllocateFile(file_path, "r");
|
||||||
|
if (!tzFile)
|
||||||
|
{
|
||||||
|
/* at level 0, if file doesn't exist, guc.c's complaint is enough */
|
||||||
|
if (errno != ENOENT || depth > 0)
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode_for_file_access(),
|
||||||
|
errmsg("could not read time zone file \"%s\": %m",
|
||||||
|
filename)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!feof(tzFile))
|
||||||
|
{
|
||||||
|
lineno++;
|
||||||
|
if (fgets(tzbuf, sizeof(tzbuf), tzFile) == NULL)
|
||||||
|
{
|
||||||
|
if (ferror(tzFile))
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode_for_file_access(),
|
||||||
|
errmsg("could not read time zone file \"%s\": %m",
|
||||||
|
filename)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* else we're at EOF after all */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (strlen(tzbuf) == sizeof(tzbuf)-1)
|
||||||
|
{
|
||||||
|
/* the line is too long for tzbuf */
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
|
||||||
|
errmsg("line is too long in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* skip over whitespace */
|
||||||
|
line = tzbuf;
|
||||||
|
while (*line && isspace((unsigned char) *line))
|
||||||
|
line++;
|
||||||
|
|
||||||
|
if (*line == '\0') /* empty line */
|
||||||
|
continue;
|
||||||
|
if (*line == '#') /* comment line */
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (pg_strncasecmp(line, "@INCLUDE", strlen("@INCLUDE")) == 0)
|
||||||
|
{
|
||||||
|
/* pstrdup so we can use filename in result data structure */
|
||||||
|
char* includeFile = pstrdup(line + strlen("@INCLUDE"));
|
||||||
|
|
||||||
|
includeFile = strtok(includeFile, WHITESPACE);
|
||||||
|
if (!includeFile || !*includeFile)
|
||||||
|
{
|
||||||
|
ereport(tz_elevel,
|
||||||
|
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||||
|
errmsg("@INCLUDE without filename in time zone file \"%s\", line %d",
|
||||||
|
filename, lineno)));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
n = ParseTzFile(includeFile, depth + 1,
|
||||||
|
base, arraysize, n);
|
||||||
|
if (n < 0)
|
||||||
|
return -1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pg_strncasecmp(line, "@OVERRIDE", strlen("@OVERRIDE")) == 0)
|
||||||
|
{
|
||||||
|
override = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!splitTzLine(filename, lineno, line, &tzentry))
|
||||||
|
return -1;
|
||||||
|
if (!validateTzEntry(&tzentry))
|
||||||
|
return -1;
|
||||||
|
n = addToArray(base, arraysize, n, &tzentry, override);
|
||||||
|
if (n < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
FreeFile(tzFile);
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* load_tzoffsets --- read and parse the specified timezone offset file
|
||||||
|
*
|
||||||
|
* filename: name specified by user
|
||||||
|
* doit: whether to actually apply the new values, or just check
|
||||||
|
* elevel: elog reporting level (will be less than ERROR)
|
||||||
|
*
|
||||||
|
* Returns TRUE if OK, FALSE if not; should avoid erroring out
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
load_tzoffsets(const char *filename, bool doit, int elevel)
|
||||||
|
{
|
||||||
|
MemoryContext tmpContext;
|
||||||
|
MemoryContext oldContext;
|
||||||
|
tzEntry *array;
|
||||||
|
int arraysize;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
tz_elevel = elevel;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a temp memory context to work in. This makes it easy to
|
||||||
|
* clean up afterwards.
|
||||||
|
*/
|
||||||
|
tmpContext = AllocSetContextCreate(CurrentMemoryContext,
|
||||||
|
"TZParserMemory",
|
||||||
|
ALLOCSET_SMALL_MINSIZE,
|
||||||
|
ALLOCSET_SMALL_INITSIZE,
|
||||||
|
ALLOCSET_SMALL_MAXSIZE);
|
||||||
|
oldContext = MemoryContextSwitchTo(tmpContext);
|
||||||
|
|
||||||
|
/* Initialize array at a reasonable size */
|
||||||
|
arraysize = 128;
|
||||||
|
array = (tzEntry *) palloc(arraysize * sizeof(tzEntry));
|
||||||
|
|
||||||
|
/* Parse the file(s) */
|
||||||
|
n = ParseTzFile(filename, 0, &array, &arraysize, 0);
|
||||||
|
|
||||||
|
/* If no errors and we should apply the result, pass it to datetime.c */
|
||||||
|
if (n >= 0 && doit)
|
||||||
|
InstallTimeZoneAbbrevs(array, n);
|
||||||
|
|
||||||
|
/* Clean up */
|
||||||
|
MemoryContextSwitchTo(oldContext);
|
||||||
|
MemoryContextDelete(tmpContext);
|
||||||
|
|
||||||
|
return (n >= 0);
|
||||||
|
}
|
@ -37,7 +37,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.339 2006/07/21 20:51:33 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.340 2006/07/25 03:51:21 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 200607211
|
#define CATALOG_VERSION_NO 200607241
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.416 2006/07/21 20:51:33 tgl Exp $
|
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.417 2006/07/25 03:51:21 tgl Exp $
|
||||||
*
|
*
|
||||||
* NOTES
|
* NOTES
|
||||||
* The script catalog/genbki.sh reads this file and generates .bki
|
* The script catalog/genbki.sh reads this file and generates .bki
|
||||||
@ -3731,6 +3731,8 @@ DATA(insert OID = 2510 ( pg_prepared_statement PGNSP PGUID 12 f f t t s 0 2249
|
|||||||
DESCR("get the prepared statements for this session");
|
DESCR("get the prepared statements for this session");
|
||||||
DATA(insert OID = 2511 ( pg_cursor PGNSP PGUID 12 f f t t s 0 2249 "" _null_ _null_ _null_ pg_cursor - _null_ ));
|
DATA(insert OID = 2511 ( pg_cursor PGNSP PGUID 12 f f t t s 0 2249 "" _null_ _null_ _null_ pg_cursor - _null_ ));
|
||||||
DESCR("get the open cursors for this session");
|
DESCR("get the open cursors for this session");
|
||||||
|
DATA(insert OID = 2599 ( pg_timezonenames PGNSP PGUID 12 f f t t s 0 2249 "" _null_ _null_ _null_ pg_timezonenames - _null_ ));
|
||||||
|
DESCR("get the available time zone names");
|
||||||
|
|
||||||
/* non-persistent series generator */
|
/* non-persistent series generator */
|
||||||
DATA(insert OID = 1066 ( generate_series PGNSP PGUID 12 f f t t v 3 23 "23 23 23" _null_ _null_ _null_ generate_series_step_int4 - _null_ ));
|
DATA(insert OID = 1066 ( generate_series PGNSP PGUID 12 f f t t v 3 23 "23 23 23" _null_ _null_ _null_ generate_series_step_int4 - _null_ ));
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/utils/datetime.h,v 1.59 2006/06/06 16:20:11 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/utils/datetime.h,v 1.60 2006/07/25 03:51:22 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -20,6 +20,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "utils/timestamp.h"
|
#include "utils/timestamp.h"
|
||||||
|
#include "utils/tzparser.h"
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------
|
/* ----------------------------------------------------------------
|
||||||
@ -300,5 +301,8 @@ extern int DecodeUnits(int field, char *lowtoken, int *val);
|
|||||||
extern int j2day(int jd);
|
extern int j2day(int jd);
|
||||||
|
|
||||||
extern bool CheckDateTokenTables(void);
|
extern bool CheckDateTokenTables(void);
|
||||||
|
extern void InstallTimeZoneAbbrevs(tzEntry *abbrevs, int n);
|
||||||
|
|
||||||
|
extern Datum pg_timezonenames(PG_FUNCTION_ARGS);
|
||||||
|
|
||||||
#endif /* DATETIME_H */
|
#endif /* DATETIME_H */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
|
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
|
||||||
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
* Written by Peter Eisentraut <peter_e@gmx.net>.
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.69 2006/07/13 18:01:02 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.70 2006/07/25 03:51:22 tgl Exp $
|
||||||
*--------------------------------------------------------------------
|
*--------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#ifndef GUC_H
|
#ifndef GUC_H
|
||||||
@ -116,7 +116,6 @@ extern bool log_statement_stats;
|
|||||||
extern bool log_btree_build_stats;
|
extern bool log_btree_build_stats;
|
||||||
|
|
||||||
extern bool SQL_inheritance;
|
extern bool SQL_inheritance;
|
||||||
extern bool Australian_timezones;
|
|
||||||
|
|
||||||
extern bool default_with_oids;
|
extern bool default_with_oids;
|
||||||
|
|
||||||
@ -220,9 +219,6 @@ extern void read_nondefault_variables(void);
|
|||||||
* belong in.
|
* belong in.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* in utils/adt/datetime.c */
|
|
||||||
extern bool ClearDateCache(bool newval, bool doit, GucSource source);
|
|
||||||
|
|
||||||
/* in commands/tablespace.c */
|
/* in commands/tablespace.c */
|
||||||
extern const char *assign_default_tablespace(const char *newval,
|
extern const char *assign_default_tablespace(const char *newval,
|
||||||
bool doit, GucSource source);
|
bool doit, GucSource source);
|
||||||
|
35
src/include/utils/tzparser.h
Normal file
35
src/include/utils/tzparser.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* tzparser.h
|
||||||
|
* Timezone offset file parsing definitions.
|
||||||
|
*
|
||||||
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
|
*
|
||||||
|
* $PostgreSQL: pgsql/src/include/utils/tzparser.h,v 1.1 2006/07/25 03:51:22 tgl Exp $
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
#ifndef TZPARSER_H
|
||||||
|
#define TZPARSER_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The result of parsing a timezone configuration file is an array of
|
||||||
|
* these structs, in order by abbrev. We export this because datetime.c
|
||||||
|
* needs it.
|
||||||
|
*/
|
||||||
|
typedef struct tzEntry
|
||||||
|
{
|
||||||
|
/* the actual data: TZ abbrev (downcased), offset, DST flag */
|
||||||
|
char *abbrev;
|
||||||
|
int offset; /* in seconds from UTC */
|
||||||
|
bool is_dst;
|
||||||
|
/* source information (for error messages) */
|
||||||
|
int lineno;
|
||||||
|
const char *filename;
|
||||||
|
} tzEntry;
|
||||||
|
|
||||||
|
|
||||||
|
extern bool load_tzoffsets(const char *filename, bool doit, int elevel);
|
||||||
|
|
||||||
|
#endif /* TZPARSER_H */
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- HOROLOGY
|
-- HOROLOGY
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
SET DateStyle = 'Postgres, MDY';
|
SET DateStyle = 'Postgres, MDY';
|
||||||
--
|
--
|
||||||
-- Test various input formats
|
-- Test various input formats
|
||||||
|
@ -1306,6 +1306,7 @@ SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schem
|
|||||||
pg_statio_user_tables | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
|
pg_statio_user_tables | SELECT pg_statio_all_tables.relid, pg_statio_all_tables.schemaname, pg_statio_all_tables.relname, pg_statio_all_tables.heap_blks_read, pg_statio_all_tables.heap_blks_hit, pg_statio_all_tables.idx_blks_read, pg_statio_all_tables.idx_blks_hit, pg_statio_all_tables.toast_blks_read, pg_statio_all_tables.toast_blks_hit, pg_statio_all_tables.tidx_blks_read, pg_statio_all_tables.tidx_blks_hit FROM pg_statio_all_tables WHERE (pg_statio_all_tables.schemaname <> ALL (ARRAY['pg_catalog'::name, 'pg_toast'::name, 'information_schema'::name]));
|
||||||
pg_stats | SELECT n.nspname AS schemaname, c.relname AS tablename, a.attname, s.stanullfrac AS null_frac, s.stawidth AS avg_width, s.stadistinct AS n_distinct, CASE 1 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::"unknown" END AS most_common_vals, CASE 1 WHEN s.stakind1 THEN s.stanumbers1 WHEN s.stakind2 THEN s.stanumbers2 WHEN s.stakind3 THEN s.stanumbers3 WHEN s.stakind4 THEN s.stanumbers4 ELSE NULL::real[] END AS most_common_freqs, CASE 2 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::"unknown" END AS histogram_bounds, CASE 3 WHEN s.stakind1 THEN s.stanumbers1[1] WHEN s.stakind2 THEN s.stanumbers2[1] WHEN s.stakind3 THEN s.stanumbers3[1] WHEN s.stakind4 THEN s.stanumbers4[1] ELSE NULL::real END AS correlation FROM (((pg_statistic s JOIN pg_class c ON ((c.oid = s.starelid))) JOIN pg_attribute a ON (((c.oid = a.attrelid) AND (a.attnum = s.staattnum)))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE has_table_privilege(c.oid, 'select'::text);
|
pg_stats | SELECT n.nspname AS schemaname, c.relname AS tablename, a.attname, s.stanullfrac AS null_frac, s.stawidth AS avg_width, s.stadistinct AS n_distinct, CASE 1 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::"unknown" END AS most_common_vals, CASE 1 WHEN s.stakind1 THEN s.stanumbers1 WHEN s.stakind2 THEN s.stanumbers2 WHEN s.stakind3 THEN s.stanumbers3 WHEN s.stakind4 THEN s.stanumbers4 ELSE NULL::real[] END AS most_common_freqs, CASE 2 WHEN s.stakind1 THEN s.stavalues1 WHEN s.stakind2 THEN s.stavalues2 WHEN s.stakind3 THEN s.stavalues3 WHEN s.stakind4 THEN s.stavalues4 ELSE NULL::"unknown" END AS histogram_bounds, CASE 3 WHEN s.stakind1 THEN s.stanumbers1[1] WHEN s.stakind2 THEN s.stanumbers2[1] WHEN s.stakind3 THEN s.stanumbers3[1] WHEN s.stakind4 THEN s.stanumbers4[1] ELSE NULL::real END AS correlation FROM (((pg_statistic s JOIN pg_class c ON ((c.oid = s.starelid))) JOIN pg_attribute a ON (((c.oid = a.attrelid) AND (a.attnum = s.staattnum)))) LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE has_table_privilege(c.oid, 'select'::text);
|
||||||
pg_tables | SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS "tablespace", c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM ((pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'r'::"char");
|
pg_tables | SELECT n.nspname AS schemaname, c.relname AS tablename, pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS "tablespace", c.relhasindex AS hasindexes, c.relhasrules AS hasrules, (c.reltriggers > 0) AS hastriggers FROM ((pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) LEFT JOIN pg_tablespace t ON ((t.oid = c.reltablespace))) WHERE (c.relkind = 'r'::"char");
|
||||||
|
pg_timezonenames | SELECT t.name, t.utc_offset, t.is_dst FROM pg_timezonenames() t(name text, utc_offset interval, is_dst boolean);
|
||||||
pg_user | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil, pg_shadow.useconfig FROM pg_shadow;
|
pg_user | SELECT pg_shadow.usename, pg_shadow.usesysid, pg_shadow.usecreatedb, pg_shadow.usesuper, pg_shadow.usecatupd, '********'::text AS passwd, pg_shadow.valuntil, pg_shadow.useconfig FROM pg_shadow;
|
||||||
pg_views | SELECT n.nspname AS schemaname, c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.oid) AS definition FROM (pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'v'::"char");
|
pg_views | SELECT n.nspname AS schemaname, c.relname AS viewname, pg_get_userbyid(c.relowner) AS viewowner, pg_get_viewdef(c.oid) AS definition FROM (pg_class c LEFT JOIN pg_namespace n ON ((n.oid = c.relnamespace))) WHERE (c.relkind = 'v'::"char");
|
||||||
rtest_v1 | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1;
|
rtest_v1 | SELECT rtest_t1.a, rtest_t1.b FROM rtest_t1;
|
||||||
@ -1322,7 +1323,7 @@ SELECT viewname, definition FROM pg_views WHERE schemaname <> 'information_schem
|
|||||||
shoelace_obsolete | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color))));
|
shoelace_obsolete | SELECT shoelace.sl_name, shoelace.sl_avail, shoelace.sl_color, shoelace.sl_len, shoelace.sl_unit, shoelace.sl_len_cm FROM shoelace WHERE (NOT (EXISTS (SELECT shoe.shoename FROM shoe WHERE (shoe.slcolor = shoelace.sl_color))));
|
||||||
street | SELECT r.name, r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath);
|
street | SELECT r.name, r.thepath, c.cname FROM ONLY road r, real_city c WHERE (c.outline ## r.thepath);
|
||||||
toyemp | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp;
|
toyemp | SELECT emp.name, emp.age, emp."location", (12 * emp.salary) AS annualsal FROM emp;
|
||||||
(46 rows)
|
(47 rows)
|
||||||
|
|
||||||
SELECT tablename, rulename, definition FROM pg_rules
|
SELECT tablename, rulename, definition FROM pg_rules
|
||||||
ORDER BY tablename, rulename;
|
ORDER BY tablename, rulename;
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- TIMESTAMP
|
-- TIMESTAMP
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
|
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
|
||||||
-- Shorthand values
|
-- Shorthand values
|
||||||
-- Not directly usable for regression testing since these are not constants.
|
-- Not directly usable for regression testing since these are not constants.
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- TIMESTAMPTZ
|
-- TIMESTAMPTZ
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
|
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('current');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('current');
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.14 2006/07/25 01:37:42 adunstan Exp $
|
* $PostgreSQL: pgsql/src/test/regress/pg_regress.c,v 1.15 2006/07/25 03:51:22 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -1564,8 +1564,9 @@ main(int argc, char *argv[])
|
|||||||
"ALTER DATABASE \"%s\" SET lc_messages TO 'C';"
|
"ALTER DATABASE \"%s\" SET lc_messages TO 'C';"
|
||||||
"ALTER DATABASE \"%s\" SET lc_monetary TO 'C';"
|
"ALTER DATABASE \"%s\" SET lc_monetary TO 'C';"
|
||||||
"ALTER DATABASE \"%s\" SET lc_numeric TO 'C';"
|
"ALTER DATABASE \"%s\" SET lc_numeric TO 'C';"
|
||||||
"ALTER DATABASE \"%s\" SET lc_time TO 'C';",
|
"ALTER DATABASE \"%s\" SET lc_time TO 'C';"
|
||||||
dbname, dbname, dbname, dbname);
|
"ALTER DATABASE \"%s\" SET timezone_abbreviations TO 'Default';",
|
||||||
|
dbname, dbname, dbname, dbname, dbname);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Install any requested PL languages
|
* Install any requested PL languages
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- HOROLOGY
|
-- HOROLOGY
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
SET DateStyle = 'Postgres, MDY';
|
SET DateStyle = 'Postgres, MDY';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- TIMESTAMP
|
-- TIMESTAMP
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
|
|
||||||
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
|
CREATE TABLE TIMESTAMP_TBL ( d1 timestamp(2) without time zone);
|
||||||
|
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
--
|
--
|
||||||
-- TIMESTAMPTZ
|
-- TIMESTAMPTZ
|
||||||
--
|
--
|
||||||
-- needed so tests pass even in Australia
|
|
||||||
SET australian_timezones = 'off';
|
|
||||||
|
|
||||||
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
|
CREATE TABLE TIMESTAMPTZ_TBL ( d1 timestamp(2) with time zone);
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
# Makefile for the timezone library
|
# Makefile for the timezone library
|
||||||
|
|
||||||
# IDENTIFICATION
|
# IDENTIFICATION
|
||||||
# $PostgreSQL: pgsql/src/timezone/Makefile,v 1.23 2005/12/09 21:19:36 petere Exp $
|
# $PostgreSQL: pgsql/src/timezone/Makefile,v 1.24 2006/07/25 03:51:22 tgl Exp $
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -35,12 +35,14 @@ zic: $(ZICOBJS)
|
|||||||
|
|
||||||
install: all installdirs
|
install: all installdirs
|
||||||
./zic -d '$(DESTDIR)$(datadir)/timezone' $(TZDATAFILES)
|
./zic -d '$(DESTDIR)$(datadir)/timezone' $(TZDATAFILES)
|
||||||
|
$(MAKE) -C tznames $@
|
||||||
|
|
||||||
installdirs:
|
installdirs:
|
||||||
$(mkinstalldirs) '$(DESTDIR)$(datadir)'
|
$(mkinstalldirs) '$(DESTDIR)$(datadir)'
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
rm -rf '$(DESTDIR)$(datadir)/timezone'
|
rm -rf '$(DESTDIR)$(datadir)/timezone'
|
||||||
|
$(MAKE) -C tznames $@
|
||||||
|
|
||||||
clean distclean maintainer-clean:
|
clean distclean maintainer-clean:
|
||||||
rm -f SUBSYS.o zic$(X) $(OBJS) $(ZICOBJS)
|
rm -f SUBSYS.o zic$(X) $(OBJS) $(ZICOBJS)
|
||||||
|
@ -11,3 +11,9 @@ from
|
|||||||
Since time zone rules change frequently in some parts of the world,
|
Since time zone rules change frequently in some parts of the world,
|
||||||
we should endeavor to update the data files before each PostgreSQL
|
we should endeavor to update the data files before each PostgreSQL
|
||||||
release.
|
release.
|
||||||
|
|
||||||
|
At each update, we should check if time zone offsets have changed.
|
||||||
|
Just search for the current or previous year and see what has changed.
|
||||||
|
Sometimes a country changes its time zone offsets, for example Georgia
|
||||||
|
in 2004. Just grepping in the zic database files for 2004 is enough to
|
||||||
|
spot such a change. Then the files under tznames/ should be updated.
|
||||||
|
168
src/timezone/tznames/Africa.txt
Normal file
168
src/timezone/tznames/Africa.txt
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
CAT 7200 # Central Africa Time
|
||||||
|
# (Africa/Blantyre)
|
||||||
|
# (Africa/Bujumbura)
|
||||||
|
# (Africa/Gaborone)
|
||||||
|
# (Africa/Harare)
|
||||||
|
# (Africa/Kigali)
|
||||||
|
# (Africa/Lubumbashi)
|
||||||
|
# (Africa/Lusaka)
|
||||||
|
# (Africa/Maputo)
|
||||||
|
CEST 7200 D # Central Europe Summer Time
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
CET 3600 # Central Europe Time
|
||||||
|
# (Africa/Algiers)
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
EAT 10800 # East Africa Time
|
||||||
|
# (Africa/Addis_Ababa)
|
||||||
|
# (Africa/Asmera)
|
||||||
|
# (Africa/Dar_es_Salaam)
|
||||||
|
# (Africa/Djibouti)
|
||||||
|
# (Africa/Kampala)
|
||||||
|
# (Africa/Khartoum)
|
||||||
|
# (Africa/Mogadishu)
|
||||||
|
# (Africa/Nairobi)
|
||||||
|
# (Indian/Antananarivo)
|
||||||
|
# (Indian/Comoro)
|
||||||
|
# (Indian/Mayotte)
|
||||||
|
EEST 10800 D # East-Egypt Summer Time
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EET 7200 # East-Egypt Time
|
||||||
|
# Eastern Europe Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Africa/Tripoli)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
SAST 7200 # South Africa Standard Time
|
||||||
|
# Australian South Standard Time
|
||||||
|
# (Africa/Maseru)
|
||||||
|
# (Africa/Mbabane)
|
||||||
|
WAST 7200 D # West Africa Summer Time
|
||||||
|
# (Africa/Windhoek)
|
||||||
|
WAT 3600 # West Africa Time
|
||||||
|
# (Africa/Bangui)
|
||||||
|
# (Africa/Brazzaville)
|
||||||
|
# (Africa/Douala)
|
||||||
|
# (Africa/Kinshasa)
|
||||||
|
# (Africa/Lagos)
|
||||||
|
# (Africa/Libreville)
|
||||||
|
# (Africa/Luanda)
|
||||||
|
# (Africa/Malabo)
|
||||||
|
# (Africa/Ndjamena)
|
||||||
|
# (Africa/Niamey)
|
||||||
|
# (Africa/Porto-Novo)
|
||||||
|
# (Africa/Windhoek)
|
||||||
|
WET 0 # Western Europe Time
|
||||||
|
# (Africa/Casablanca)
|
||||||
|
# (Africa/El_Aaiun)
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
291
src/timezone/tznames/America.txt
Normal file
291
src/timezone/tznames/America.txt
Normal file
@ -0,0 +1,291 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Acre time is sometimes called Acre Standard Time (AST) which leads to a
|
||||||
|
# conflict with AST (see below at AST)
|
||||||
|
ACT -18000 # Acre Time
|
||||||
|
# (America/Eirunepe)
|
||||||
|
# (America/Rio_Branco)
|
||||||
|
# CONFLICT! ACST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ACST: Central Australia Standard Time (Australia)
|
||||||
|
ACST -14400 D # Acre Summer Time (not in zic)
|
||||||
|
# (America/Eirunepe)
|
||||||
|
# (America/Rio_Branco)
|
||||||
|
# CONFLICT! ADT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ADT: Arabic Daylight Time (Asia)
|
||||||
|
ADT -10800 D # Atlantic Daylight Time
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Thule)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
AKDT -28800 D # Alaska Daylight Time
|
||||||
|
# (America/Anchorage)
|
||||||
|
# (America/Juneau)
|
||||||
|
# (America/Nome)
|
||||||
|
# (America/Yakutat)
|
||||||
|
AKST -32400 # Alaska Standard Time
|
||||||
|
# (America/Anchorage)
|
||||||
|
# (America/Juneau)
|
||||||
|
# (America/Nome)
|
||||||
|
# (America/Yakutat)
|
||||||
|
# CONFLICT! AMST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AMST: Armenia Summer Time (Asia)
|
||||||
|
AMST -10800 D # Amazon Summer Time
|
||||||
|
# (America/Campo_Grande)
|
||||||
|
# (America/Cuiaba)
|
||||||
|
# CONFLICT! AMT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AMT: Armenia Time (Asia)
|
||||||
|
AMT -14400 # Amazon Time
|
||||||
|
# (America/Boa_Vista)
|
||||||
|
# (America/Campo_Grande)
|
||||||
|
# (America/Cuiaba)
|
||||||
|
# (America/Manaus)
|
||||||
|
# (America/Porto_Velho)
|
||||||
|
ART -10800 # Argentina Time (not in zic)
|
||||||
|
# CONFLICT! AST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AST: Arabic Standard Time (Asia)
|
||||||
|
# - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
|
||||||
|
# - AST/ACT: Acre Standard Time (America) listed as ACT
|
||||||
|
# - AST: Anguilla Standard Time (America) same offset
|
||||||
|
# - AST: Antigua Standard Time (America) same offset
|
||||||
|
# - AST: Antilles Standard Time (America) same offset
|
||||||
|
AST -14400 # Atlantic Standard Time
|
||||||
|
# (America/Anguilla)
|
||||||
|
# (America/Antigua)
|
||||||
|
# (America/Aruba)
|
||||||
|
# (America/Curacao)
|
||||||
|
# (America/Dominica)
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Grenada)
|
||||||
|
# (America/Guadeloupe)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Martinique)
|
||||||
|
# (America/Montserrat)
|
||||||
|
# (America/Port_of_Spain)
|
||||||
|
# (America/Puerto_Rico)
|
||||||
|
# (America/Santo_Domingo)
|
||||||
|
# (America/St_Kitts)
|
||||||
|
# (America/St_Lucia)
|
||||||
|
# (America/St_Thomas)
|
||||||
|
# (America/St_Vincent)
|
||||||
|
# (America/Thule)
|
||||||
|
# (America/Tortola)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
BOT -14400 # Bolivia Time
|
||||||
|
# (America/La_Paz)
|
||||||
|
BRA -10800 # Brazil Time (not in zic)
|
||||||
|
BRST -7200 D # Brasil Summer Time
|
||||||
|
# (America/Sao_Paulo)
|
||||||
|
BRT -10800 # Brasil Time
|
||||||
|
# (America/Araguaina)
|
||||||
|
# (America/Bahia)
|
||||||
|
# (America/Belem)
|
||||||
|
# (America/Fortaleza)
|
||||||
|
# (America/Maceio)
|
||||||
|
# (America/Recife)
|
||||||
|
# (America/Sao_Paulo)
|
||||||
|
# CONFLICT! CDT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CDT: Central Daylight Time (America)
|
||||||
|
# - CDT: Mexico Central Daylight Time (America)
|
||||||
|
# - CDT: Canada Central Daylight Time (America)
|
||||||
|
CDT -14400 D # Cuba Central Daylight Time
|
||||||
|
# (America/Havana)
|
||||||
|
# CONFLICT! CDT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CDT: Mexico Central Daylight Time (America)
|
||||||
|
# - CDT: Cuba Central Daylight Time (America)
|
||||||
|
# - CDT: Canada Central Daylight Time (America)
|
||||||
|
CDT -18000 D # Central Daylight Time
|
||||||
|
# (America/Cancun)
|
||||||
|
# (America/Chicago)
|
||||||
|
# (America/Menominee)
|
||||||
|
# (America/Merida)
|
||||||
|
# (America/Mexico_City)
|
||||||
|
# (America/Monterrey)
|
||||||
|
# (America/North_Dakota/Center)
|
||||||
|
# (America/Rainy_River)
|
||||||
|
# (America/Rankin_Inlet)
|
||||||
|
# (America/Winnipeg)
|
||||||
|
CLST -10800 D # Chile Summer Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
CLT -14400 # Chile Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
COT -18000 # Columbia Time (not in zic)
|
||||||
|
# CONFLICT! CST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CST: Central Standard Time (Australia)
|
||||||
|
# - CST: Central Standard Time (America)
|
||||||
|
CST -18000 # Cuba Central Standard Time (America)
|
||||||
|
# (America/Havana)
|
||||||
|
# CONFLICT! CST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CST: Central Standard Time (Australia)
|
||||||
|
# - CST: Cuba Central Standard Time (America)
|
||||||
|
CST -21600 # Central Standard Time (America)
|
||||||
|
# (America/Cancun)
|
||||||
|
# (America/Chicago)
|
||||||
|
# (America/Menominee)
|
||||||
|
# (America/Merida)
|
||||||
|
# (America/Mexico_City)
|
||||||
|
# (America/Monterrey)
|
||||||
|
# (America/North_Dakota/Center)
|
||||||
|
# (America/Rainy_River)
|
||||||
|
# (America/Rankin_Inlet)
|
||||||
|
# (America/Regina)
|
||||||
|
# (America/Swift_Current)
|
||||||
|
# (America/Winnipeg)
|
||||||
|
ECT -18000 # Ecuador Time
|
||||||
|
# Eastern Caribbean Time
|
||||||
|
# (America/Guayaquil)
|
||||||
|
EDT -14400 D # Eastern Daylight Saving Time
|
||||||
|
# (America/Detroit)
|
||||||
|
# (America/Grand_Turk)
|
||||||
|
# (America/Indiana/Indianapolis)
|
||||||
|
# (America/Indiana/Knox)
|
||||||
|
# (America/Indiana/Marengo)
|
||||||
|
# (America/Indiana/Vevay)
|
||||||
|
# (America/Iqaluit)
|
||||||
|
# (America/Kentucky/Louisville)
|
||||||
|
# (America/Kentucky/Monticello)
|
||||||
|
# (America/Montreal)
|
||||||
|
# (America/Nassau)
|
||||||
|
# (America/New_York)
|
||||||
|
# (America/Nipigon)
|
||||||
|
# (America/Pangnirtung)
|
||||||
|
# (America/Thunder_Bay)
|
||||||
|
# (America/Toronto)
|
||||||
|
EGST 0 D # East Greenland Summer Time
|
||||||
|
# (America/Scoresbysund)
|
||||||
|
EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
|
||||||
|
# (America/Scoresbysund)
|
||||||
|
# CONFLICT! EST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - EST: Eastern Standard Time (Australia)
|
||||||
|
EST -18000 # Eastern Standard Time (America)
|
||||||
|
# (America/Cayman)
|
||||||
|
# (America/Coral_Harbour)
|
||||||
|
# (America/Detroit)
|
||||||
|
# (America/Grand_Turk)
|
||||||
|
# (America/Indiana/Indianapolis)
|
||||||
|
# (America/Indiana/Knox)
|
||||||
|
# (America/Indiana/Marengo)
|
||||||
|
# (America/Indiana/Vevay)
|
||||||
|
# (America/Iqaluit)
|
||||||
|
# (America/Jamaica)
|
||||||
|
# (America/Kentucky/Louisville)
|
||||||
|
# (America/Kentucky/Monticello)
|
||||||
|
# (America/Montreal)
|
||||||
|
# (America/Nassau)
|
||||||
|
# (America/New_York)
|
||||||
|
# (America/Nipigon)
|
||||||
|
# (America/Panama)
|
||||||
|
# (America/Pangnirtung)
|
||||||
|
# (America/Thunder_Bay)
|
||||||
|
# (America/Toronto)
|
||||||
|
FNT -7200 # Fernando de Noronha Time
|
||||||
|
# (America/Noronha)
|
||||||
|
FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
|
||||||
|
# (America/Noronha)
|
||||||
|
GFT -10800 # French Guiana Time
|
||||||
|
# (America/Cayenne)
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
GYT -14400 # Guyana Time
|
||||||
|
# (America/Guyana)
|
||||||
|
HADT -32400 D # Hawaii-Aleutain Daylight Time
|
||||||
|
# (America/Adak)
|
||||||
|
HAST -36000 # Hawaii-Aleutain Standard Time
|
||||||
|
# (America/Adak)
|
||||||
|
MDT -21600 D # Mexico Mountain Daylight Time
|
||||||
|
# Mountain Daylight Time
|
||||||
|
# (America/Boise)
|
||||||
|
# (America/Cambridge_Bay)
|
||||||
|
# (America/Chihuahua)
|
||||||
|
# (America/Denver)
|
||||||
|
# (America/Edmonton)
|
||||||
|
# (America/Inuvik)
|
||||||
|
# (America/Mazatlan)
|
||||||
|
# (America/Yellowknife)
|
||||||
|
MST -25200 # Mexico Mountain Standard Time
|
||||||
|
# Mountain Standard Time
|
||||||
|
# (America/Boise)
|
||||||
|
# (America/Cambridge_Bay)
|
||||||
|
# (America/Chihuahua)
|
||||||
|
# (America/Dawson_Creek)
|
||||||
|
# (America/Denver)
|
||||||
|
# (America/Edmonton)
|
||||||
|
# (America/Hermosillo)
|
||||||
|
# (America/Inuvik)
|
||||||
|
# (America/Mazatlan)
|
||||||
|
# (America/Phoenix)
|
||||||
|
# (America/Yellowknife)
|
||||||
|
NDT -9000 D # Newfoundland Daylight Time
|
||||||
|
# (America/St_Johns)
|
||||||
|
# CONFLICT! NFT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - NFT: Norfolk Time (Pacific)
|
||||||
|
NFT -12600 # Newfoundland Time (not in zic)
|
||||||
|
NST -12600 # Newfoundland Standard Time
|
||||||
|
# (America/St_Johns)
|
||||||
|
PDT -25200 D # Pacific Daylight Time
|
||||||
|
# (America/Dawson)
|
||||||
|
# (America/Los_Angeles)
|
||||||
|
# (America/Tijuana)
|
||||||
|
# (America/Vancouver)
|
||||||
|
# (America/Whitehorse)
|
||||||
|
PET -18000 # Peru Time (not in zic)
|
||||||
|
PMDT -7200 D # Pierre & Miquelon Daylight Time
|
||||||
|
# (America/Miquelon)
|
||||||
|
PMST -10800 # Pierre & Miquelon Standard Time
|
||||||
|
# (America/Miquelon)
|
||||||
|
PST -28800 # Pacific Standard Time
|
||||||
|
# (America/Dawson)
|
||||||
|
# (America/Los_Angeles)
|
||||||
|
# (America/Tijuana)
|
||||||
|
# (America/Vancouver)
|
||||||
|
# (America/Whitehorse)
|
||||||
|
# (Pacific/Pitcairn)
|
||||||
|
PYST -10800 D # Paraguay Summer Time
|
||||||
|
# (America/Asuncion)
|
||||||
|
PYT -14400 # Paraguay Time
|
||||||
|
# (America/Asuncion)
|
||||||
|
SRT -10800 # Suriname Time
|
||||||
|
# (America/Paramaribo)
|
||||||
|
UYST -7200 D # Uruguay Summer Time (not in zic)
|
||||||
|
UYT -10800 # Uruguay Time (not in zic)
|
||||||
|
VET -14400 # Venezuela Time
|
||||||
|
# (America/Caracas)
|
||||||
|
WGST -7200 D # Western Greenland Summer Time
|
||||||
|
# (America/Godthab)
|
||||||
|
WGT -10800 # West Greenland Time
|
||||||
|
# (America/Godthab)
|
37
src/timezone/tznames/Antarctica.txt
Normal file
37
src/timezone/tznames/Antarctica.txt
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
CLST -10800 D # Chile Summer Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
CLT -14400 # Chile Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
DAVT 25200 # Davis Time (Antarctica)
|
||||||
|
# (Antarctica/Davis)
|
||||||
|
DDUT 36000 # Dumont-d`Urville Time (Antarctica)
|
||||||
|
# (Antarctica/DumontDUrville)
|
||||||
|
MAWT 21600 # Mawson Time (Antarctica)
|
||||||
|
# (Antarctica/Mawson)
|
||||||
|
NZDT 46800 D # New Zealand Daylight Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
NZST 43200 # New Zealand Standard Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
ROTT -10800 # Rothera Time
|
||||||
|
# (Antarctica/Rothera)
|
||||||
|
SYOT 10800 # Syowa Time
|
||||||
|
# (Antarctica/Syowa)
|
||||||
|
VOST 21600 # Vostok time
|
||||||
|
# (Antarctica/Vostok)
|
||||||
|
# CONFLICT! WST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - WST: West Samoa Time
|
||||||
|
WST 28800 # Western Standard Time (Australia)
|
||||||
|
# (Antarctica/Casey)
|
||||||
|
# (Australia/Perth)
|
236
src/timezone/tznames/Asia.txt
Normal file
236
src/timezone/tznames/Asia.txt
Normal file
@ -0,0 +1,236 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
# CONFLICT! ADT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ADT: Atlantic Daylight Time (America)
|
||||||
|
ADT 14400 D # Arabia Daylight Time
|
||||||
|
# (Asia/Baghdad)
|
||||||
|
AFT 16200 # Afghanistan Time
|
||||||
|
# (Asia/Kabul)
|
||||||
|
ALMST 25200 D # Alma-Ata Summer Time
|
||||||
|
# (Asia/Almaty)
|
||||||
|
ALMT 21600 # Alma-Ata Time
|
||||||
|
# (Asia/Almaty)
|
||||||
|
# CONFLICT! AMST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AMST: Amazon Summer Time (America)
|
||||||
|
AMST 18000 D # Armenia Summer Time
|
||||||
|
# (Asia/Yerevan)
|
||||||
|
# CONFLICT! AMT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AMT: Amazon Time (America)
|
||||||
|
AMT 14400 # Armenia Time
|
||||||
|
# (Asia/Yerevan)
|
||||||
|
ANAST 46800 D # Anadyr Summer Time
|
||||||
|
# (Asia/Anadyr)
|
||||||
|
ANAT 43200 # Anadyr Time
|
||||||
|
# (Asia/Anadyr)
|
||||||
|
AQTT 18000 # Aqtau Time
|
||||||
|
# Aqtobe Time
|
||||||
|
# (Asia/Aqtau)
|
||||||
|
# (Asia/Aqtobe)
|
||||||
|
# CONFLICT! AST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AST: Atlantic Standard Time (America)
|
||||||
|
# - AST/ACT: Acre Standard Time (America) listed as ACT
|
||||||
|
# - AST: Anguilla Standard Time (America) same offset as Atlantic Standard Time
|
||||||
|
# - AST: Antigua Standard Time (America) same offset as Atlantic Standard Time
|
||||||
|
# - AST: Antilles Standard Time (America) same offset as Atlantic Standard Time
|
||||||
|
# - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
|
||||||
|
AST 10800 # Arabia Standard Time
|
||||||
|
# (Asia/Aden)
|
||||||
|
# (Asia/Baghdad)
|
||||||
|
# (Asia/Bahrain)
|
||||||
|
# (Asia/Kuwait)
|
||||||
|
# (Asia/Qatar)
|
||||||
|
# (Asia/Riyadh)
|
||||||
|
AZST 18000 D # Azerbaijan Summer Time
|
||||||
|
# (Asia/Baku)
|
||||||
|
AZT 14400 # Azerbaijan Time
|
||||||
|
# (Asia/Baku)
|
||||||
|
BDT 21600 # Bangladesh Time
|
||||||
|
# (Asia/Dhaka)
|
||||||
|
BNT 28800 # Brunei Darussalam Time
|
||||||
|
# (Asia/Brunei)
|
||||||
|
BORT 28800 # Borneo Time (Indonesia) (not in zic)
|
||||||
|
BTT 21600 # Bhutan Time
|
||||||
|
# (Asia/Thimphu)
|
||||||
|
CCT 28800 # China Coastal Time (not in zic)
|
||||||
|
CHOST 36000 D # Choibalsan Summer Time
|
||||||
|
# (Asia/Choibalsan)
|
||||||
|
CHOT 32400 # Choibalsan Time
|
||||||
|
# (Asia/Choibalsan)
|
||||||
|
CIT 28800 # Central Indonesia Time
|
||||||
|
# (Asia/Makassar)
|
||||||
|
EEST 10800 D # East-Egypt Summer Time
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EET 7200 # East-Egypt Time
|
||||||
|
# Eastern Europe Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Africa/Tripoli)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EIT 32400 # East Indonesia Time
|
||||||
|
# (Asia/Jayapura)
|
||||||
|
GEST 14400 D # Georgia Summer Time (there was a timezone change in 2004)
|
||||||
|
# (Asia/Tbilisi)
|
||||||
|
GET 10800 # Georgia Time (there was a timezone change in 2004)
|
||||||
|
# (Asia/Tbilisi)
|
||||||
|
# CONFLICT! GST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - GST: South Georgia Time (Atlantic)
|
||||||
|
GST 14400 # Gulf Standard Time
|
||||||
|
# (Asia/Dubai)
|
||||||
|
# (Asia/Muscat)
|
||||||
|
HKT 28800 # Hong Kong Time (not in zic)
|
||||||
|
HOVST 28800 D # Hovd Summer Time
|
||||||
|
# (Asia/Hovd)
|
||||||
|
HOVT 25200 # Hovd Time
|
||||||
|
# (Asia/Hovd)
|
||||||
|
ICT 25200 # Indochina Time
|
||||||
|
# (Asia/Bangkok)
|
||||||
|
# (Asia/Phnom_Penh)
|
||||||
|
# (Asia/Saigon)
|
||||||
|
# (Asia/Vientiane)
|
||||||
|
IRKST 32400 D # Irkutsk Summer Time
|
||||||
|
# (Asia/Irkutsk)
|
||||||
|
IRKT 28800 # Irkutsk Time
|
||||||
|
# (Asia/Irkutsk)
|
||||||
|
IRT 12600 # Iran Time (not in zic)
|
||||||
|
# CONFLICT! IST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - IST: Irish Summer Time (Europe)
|
||||||
|
# - IST: Israel Standard Time (Asia)
|
||||||
|
IST 19800 # Indian Standard Time
|
||||||
|
# (Asia/Calcutta)
|
||||||
|
# CONFLICT! IST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - IST: Irish Summer Time (Europe)
|
||||||
|
# - IST: Indian Standard Time (Asia)
|
||||||
|
IST 7200 # Israel Standard Time
|
||||||
|
# (this time zone is not contained in the ZIC database)
|
||||||
|
JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
|
||||||
|
KDT 36000 D # Korean Daylight Time (not in zic)
|
||||||
|
KGST 21600 D # Kyrgyzstan Summer Time
|
||||||
|
# (Asia/Bishkek)
|
||||||
|
KGT 18000 # Kyrgyzstan Time
|
||||||
|
# (Asia/Bishkek)
|
||||||
|
KRAST 28800 D # Krasnoyarsk Summer Time
|
||||||
|
# (Asia/Krasnoyarsk)
|
||||||
|
KRAT 25200 # Krasnoyarsk Time
|
||||||
|
# (Asia/Krasnoyarsk)
|
||||||
|
KST 32400 # Korean Standard Time
|
||||||
|
# (Asia/Pyongyang)
|
||||||
|
LKT 21600 # Lanka Time
|
||||||
|
# (Asia/Colombo)
|
||||||
|
MAGST 43200 D # Magadan Summer Time
|
||||||
|
# (Asia/Magadan)
|
||||||
|
MAGT 39600 # Magadan Time
|
||||||
|
# (Asia/Magadan)
|
||||||
|
MMT 23400 # Myanmar Time
|
||||||
|
# (Asia/Rangoon)
|
||||||
|
MYT 28800 # Malaysia Time
|
||||||
|
# (Asia/Kuala_Lumpur)
|
||||||
|
# (Asia/Kuching)
|
||||||
|
NOVST 25200 D # Novosibirsk Summer Time
|
||||||
|
# (Asia/Novosibirsk)
|
||||||
|
NOVT 21600 # Novosibirsk Time
|
||||||
|
# (Asia/Novosibirsk)
|
||||||
|
NPT 20700 # Nepal Time
|
||||||
|
# (Asia/Katmandu)
|
||||||
|
OMSST 25200 D # Omsk Summer Time
|
||||||
|
# (Asia/Omsk)
|
||||||
|
OMST 21600 # Omsk Time
|
||||||
|
# (Asia/Omsk)
|
||||||
|
ORAT 18000 # Oral Time
|
||||||
|
# (Asia/Oral)
|
||||||
|
PETST 46800 D # Petropavlovsk-Kamchatski Summer Time
|
||||||
|
# (Asia/Kamchatka)
|
||||||
|
PETT 43200 # Petropavlovsk-Kamchatski Time
|
||||||
|
# (Asia/Kamchatka)
|
||||||
|
PHT 28800 # Phillipine Time (not in zic)
|
||||||
|
PKT 18000 # Pakistan Time (not in zic)
|
||||||
|
QYZT 21600 # Kizilorda Time
|
||||||
|
# (Asia/Qyzylorda)
|
||||||
|
SAKST 39600 D # Sakhalin Summer Time
|
||||||
|
# (Asia/Sakhalin)
|
||||||
|
SAKT 36000 # Sakhalin Time
|
||||||
|
# (Asia/Sakhalin)
|
||||||
|
SGT 28800 # Singapore Time
|
||||||
|
# (Asia/Singapore)
|
||||||
|
TJT 18000 # Tajikistan Time
|
||||||
|
# (Asia/Dushanbe)
|
||||||
|
TLT 32400 # East Timor Time
|
||||||
|
# (Asia/Dili)
|
||||||
|
TMT 18000 # Turkmenistan Time
|
||||||
|
# (Asia/Ashgabat)
|
||||||
|
ULAST 32400 D # Ulan Bator Summer Time
|
||||||
|
# (Asia/Ulaanbaatar)
|
||||||
|
ULAT 28800 # Ulan Bator Time
|
||||||
|
# (Asia/Ulaanbaatar)
|
||||||
|
UZST 21600 D # Uzbekistan Summer Time
|
||||||
|
# (Asia/Samarkand)
|
||||||
|
# (Asia/Tashkent)
|
||||||
|
UZT 18000 # Uzbekistan Time
|
||||||
|
# (Asia/Samarkand)
|
||||||
|
# (Asia/Tashkent)
|
||||||
|
VLAST 39600 D # Vladivostok Summer Time
|
||||||
|
# (Asia/Vladivostok)
|
||||||
|
VLAT 36000 # Vladivostok Time
|
||||||
|
# (Asia/Vladivostok)
|
||||||
|
WIT 25200 # Waktu Indonesia Timur
|
||||||
|
# West Indonesia Time
|
||||||
|
# (Asia/Jakarta)
|
||||||
|
# (Asia/Pontianak)
|
||||||
|
YAKST 36000 D # Yakutsk Summer Time
|
||||||
|
# (Asia/Yakutsk)
|
||||||
|
YAKT 32400 # Yakutsk Time
|
||||||
|
# (Asia/Yakutsk)
|
||||||
|
YEKST 21600 D # Yekaterinburg Summer Time
|
||||||
|
# (Asia/Yekaterinburg)
|
||||||
|
YEKT 18000 # Yekaterinburg Time
|
||||||
|
# (Asia/Yekaterinburg)
|
92
src/timezone/tznames/Atlantic.txt
Normal file
92
src/timezone/tznames/Atlantic.txt
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
# CONFLICT! ADT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ADT: Arabic Daylight Time (Asia)
|
||||||
|
ADT -10800 D # Atlantic Daylight Time
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Thule)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
# CONFLICT! AST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AST: Arabic Standard Time (Asia)
|
||||||
|
# - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
|
||||||
|
# - AST/ACT: Acre Standard Time (America) listed as ACT
|
||||||
|
# - AST: Anguilla Standard Time (America) same offset
|
||||||
|
# - AST: Antigua Standard Time (America) same offset
|
||||||
|
# - AST: Antilles Standard Time (America) same offset
|
||||||
|
AST -14400 # Atlantic Standard Time
|
||||||
|
# (America/Anguilla)
|
||||||
|
# (America/Antigua)
|
||||||
|
# (America/Aruba)
|
||||||
|
# (America/Curacao)
|
||||||
|
# (America/Dominica)
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Grenada)
|
||||||
|
# (America/Guadeloupe)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Martinique)
|
||||||
|
# (America/Montserrat)
|
||||||
|
# (America/Port_of_Spain)
|
||||||
|
# (America/Puerto_Rico)
|
||||||
|
# (America/Santo_Domingo)
|
||||||
|
# (America/St_Kitts)
|
||||||
|
# (America/St_Lucia)
|
||||||
|
# (America/St_Thomas)
|
||||||
|
# (America/St_Vincent)
|
||||||
|
# (America/Thule)
|
||||||
|
# (America/Tortola)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
AZOST 0 D # Azores Summer Time
|
||||||
|
# (Atlantic/Azores)
|
||||||
|
AZOT -3600 # Azores Time
|
||||||
|
# (Atlantic/Azores)
|
||||||
|
CVT -3600 # Cape Verde Time
|
||||||
|
# (Atlantic/Cape_Verde)
|
||||||
|
FKST -10800 D # Falkland Islands Summer Time
|
||||||
|
# (Atlantic/Stanley)
|
||||||
|
FKT -14400 # Falkland Islands Time
|
||||||
|
# (Atlantic/Stanley)
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
# CONFLICT! GST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - GST: Gulf Standard Time (Asia)
|
||||||
|
GST -7200 # South Georgia Time (Atlantic)
|
||||||
|
# (Atlantic/South_Georgia)
|
||||||
|
WEST 3600 D # Western Europe Summer Time
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
||||||
|
WET 0 # Western Europe Time
|
||||||
|
# (Africa/Casablanca)
|
||||||
|
# (Africa/El_Aaiun)
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
33
src/timezone/tznames/Australia
Normal file
33
src/timezone/tznames/Australia
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Time zone configuration file for set "Australia"
|
||||||
|
|
||||||
|
# In order to use this file, you need to set the run-time parameter
|
||||||
|
# timezone_abbreviations to 'Australia'. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
|
||||||
|
|
||||||
|
# include the default set
|
||||||
|
@INCLUDE Default
|
||||||
|
|
||||||
|
# most timezones are already defined in the default set. With the OVERRIDE
|
||||||
|
# option, PostgreSQL will use the new definitions instead of throwing an error
|
||||||
|
# in case of a conflict.
|
||||||
|
@OVERRIDE
|
||||||
|
|
||||||
|
ACST 34200 # Central Australia Standard Time (not in zic)
|
||||||
|
CST 34200 # Central Standard Time (Australia)
|
||||||
|
# (Australia/Adelaide)
|
||||||
|
# (Australia/Broken_Hill)
|
||||||
|
EAST 36000 # East Australian Standard Time (Australia) (not in zic)
|
||||||
|
EST 36000 # Eastern Standard Time (Australia)
|
||||||
|
# (Australia/Currie)
|
||||||
|
# (Australia/Hobart)
|
||||||
|
# (Australia/Melbourne)
|
||||||
|
# (Australia/Sydney)
|
||||||
|
# (Australia/Currie)
|
||||||
|
# (Australia/Hobart)
|
||||||
|
# (Australia/Melbourne)
|
||||||
|
# (Australia/Sydney)
|
||||||
|
SAT 34200 # South Australian Standard Time (not in zic)
|
||||||
|
WST 28800 # Western Standard Time (Australia)
|
||||||
|
# (Antarctica/Casey)
|
||||||
|
# (Australia/Perth)
|
59
src/timezone/tznames/Australia.txt
Normal file
59
src/timezone/tznames/Australia.txt
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
ACSST 37800 D # Central Australia (not in zic)
|
||||||
|
# CONFLICT! ACST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ACST: Acre Summer Time (America)
|
||||||
|
ACST 34200 # Central Australia Standard Time (not in zic)
|
||||||
|
AESST 39600 D # Australia Eastern Summer Standard Time (not in zic)
|
||||||
|
AEST 36000 # Australia Eastern Standard Time (not in zic)
|
||||||
|
AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
|
||||||
|
AWST 28800 # Australia Western Standard Time (not in zic)
|
||||||
|
CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
|
||||||
|
CAST 34200 # Central Australia Standard Time (not in zic)
|
||||||
|
# CONFLICT! CST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CST: Central Standard Time (America)
|
||||||
|
# - CST: Cuba Central Standard Time (America)
|
||||||
|
CST 34200 # Central Standard Time (Australia)
|
||||||
|
# (Australia/Adelaide)
|
||||||
|
# (Australia/Broken_Hill)
|
||||||
|
# CONFLICT! EAST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - EAST: Easter Island Time (Chile) (Pacific)
|
||||||
|
EAST 36000 # East Australian Standard Time (not in zic)
|
||||||
|
# CONFLICT! EST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - EST: Eastern Standard Time (America)
|
||||||
|
EST 36000 # Eastern Standard Time (Australia)
|
||||||
|
# (Australia/Currie)
|
||||||
|
# (Australia/Hobart)
|
||||||
|
# (Australia/Melbourne)
|
||||||
|
# (Australia/Sydney)
|
||||||
|
# (Australia/Currie)
|
||||||
|
# (Australia/Hobart)
|
||||||
|
# (Australia/Melbourne)
|
||||||
|
# (Australia/Sydney)
|
||||||
|
LHDT 39600 D # Lord Howe Daylight Time, Australia (not in zic)
|
||||||
|
LHST 37800 # Lord Howe Standard Time (Australia)
|
||||||
|
# (Australia/Lord_Howe)
|
||||||
|
LIGT 36000 # Melbourne, Australia (not in zic)
|
||||||
|
NZT 43200 # New Zealand Time (not in zic)
|
||||||
|
SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
|
||||||
|
SAST 34200 # South Australian Standard Time (not in zic)
|
||||||
|
SAT 34200 # South Australian Standard Time (not in zic)
|
||||||
|
WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
|
||||||
|
WAST 25200 # West Australian Standard Time (not in zic)
|
||||||
|
WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
|
||||||
|
# CONFLICT! WST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - WST: West Samoa Time
|
||||||
|
WST 28800 # Western Standard Time (Australia)
|
||||||
|
# (Antarctica/Casey)
|
||||||
|
# (Australia/Perth)
|
||||||
|
|
702
src/timezone/tznames/Default
Normal file
702
src/timezone/tznames/Default
Normal file
@ -0,0 +1,702 @@
|
|||||||
|
# Time zone configuration file for set "Default"
|
||||||
|
|
||||||
|
# In order to use this file, you need to set the run-time parameter
|
||||||
|
# timezone_abbreviations to 'Default'. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
|
||||||
|
|
||||||
|
#################### AFRICA ####################
|
||||||
|
|
||||||
|
EAT 10800 # East Africa Time
|
||||||
|
# (Africa/Addis_Ababa)
|
||||||
|
# (Africa/Asmera)
|
||||||
|
# (Africa/Dar_es_Salaam)
|
||||||
|
# (Africa/Djibouti)
|
||||||
|
# (Africa/Kampala)
|
||||||
|
# (Africa/Khartoum)
|
||||||
|
# (Africa/Mogadishu)
|
||||||
|
# (Africa/Nairobi)
|
||||||
|
# (Indian/Antananarivo)
|
||||||
|
# (Indian/Comoro)
|
||||||
|
# (Indian/Mayotte)
|
||||||
|
WAT 3600 # West Africa Time
|
||||||
|
# (Africa/Bangui)
|
||||||
|
# (Africa/Brazzaville)
|
||||||
|
# (Africa/Douala)
|
||||||
|
# (Africa/Kinshasa)
|
||||||
|
# (Africa/Lagos)
|
||||||
|
# (Africa/Libreville)
|
||||||
|
# (Africa/Luanda)
|
||||||
|
# (Africa/Malabo)
|
||||||
|
# (Africa/Ndjamena)
|
||||||
|
# (Africa/Niamey)
|
||||||
|
# (Africa/Porto-Novo)
|
||||||
|
# (Africa/Windhoek)
|
||||||
|
|
||||||
|
#################### AMERICA ####################
|
||||||
|
|
||||||
|
# Acre time is sometimes called Acre Standard Time (AST) which leads to a
|
||||||
|
# conflict with AST (see below at AST)
|
||||||
|
ACT -18000 # Acre Time
|
||||||
|
# (America/Eirunepe)
|
||||||
|
# (America/Rio_Branco)
|
||||||
|
ACST -14400 D # Acre Summer Time
|
||||||
|
# (America/Eirunepe)
|
||||||
|
# (America/Rio_Branco)
|
||||||
|
AKDT -28800 D # Alaska Daylight Time
|
||||||
|
# (America/Anchorage)
|
||||||
|
# (America/Juneau)
|
||||||
|
# (America/Nome)
|
||||||
|
# (America/Yakutat)
|
||||||
|
AKST -32400 # Alaska Standard Time
|
||||||
|
# (America/Anchorage)
|
||||||
|
# (America/Juneau)
|
||||||
|
# (America/Nome)
|
||||||
|
# (America/Yakutat)
|
||||||
|
ART -10800 # Argentina Time (not in zic)
|
||||||
|
BOT -14400 # Bolivia Time
|
||||||
|
# (America/La_Paz)
|
||||||
|
BRA -10800 # Brazil Time (not in zic)
|
||||||
|
BRST -7200 D # Brasil Summer Time
|
||||||
|
# (America/Sao_Paulo)
|
||||||
|
BRT -10800 # Brasil Time
|
||||||
|
# (America/Araguaina)
|
||||||
|
# (America/Bahia)
|
||||||
|
# (America/Belem)
|
||||||
|
# (America/Fortaleza)
|
||||||
|
# (America/Maceio)
|
||||||
|
# (America/Recife)
|
||||||
|
# (America/Sao_Paulo)
|
||||||
|
COT -18000 # Columbia Time (not in zic)
|
||||||
|
# CONFLICT! CDT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CDT: Mexico Central Daylight Time (America)
|
||||||
|
# - CDT: Cuba Central Daylight Time (America)
|
||||||
|
# - CDT: Canada Central Daylight Time (America)
|
||||||
|
CDT -18000 D # Central Daylight Time
|
||||||
|
# (America/Cancun)
|
||||||
|
# (America/Chicago)
|
||||||
|
# (America/Menominee)
|
||||||
|
# (America/Merida)
|
||||||
|
# (America/Mexico_City)
|
||||||
|
# (America/Monterrey)
|
||||||
|
# (America/North_Dakota/Center)
|
||||||
|
# (America/Rainy_River)
|
||||||
|
# (America/Rankin_Inlet)
|
||||||
|
# (America/Winnipeg)
|
||||||
|
CLST -10800 D # Chile Summer Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
CLT -14400 # Chile Time
|
||||||
|
# (America/Santiago)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
# CONFLICT! CST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - CST: Central Standard Time (Australia)
|
||||||
|
# - CST: Cuba Central Standard Time (America)
|
||||||
|
CST -21600 # Central Standard Time (America)
|
||||||
|
# (America/Cancun)
|
||||||
|
# (America/Chicago)
|
||||||
|
# (America/Menominee)
|
||||||
|
# (America/Merida)
|
||||||
|
# (America/Mexico_City)
|
||||||
|
# (America/Monterrey)
|
||||||
|
# (America/North_Dakota/Center)
|
||||||
|
# (America/Rainy_River)
|
||||||
|
# (America/Rankin_Inlet)
|
||||||
|
# (America/Regina)
|
||||||
|
# (America/Swift_Current)
|
||||||
|
# (America/Winnipeg)
|
||||||
|
EDT -14400 D # Eastern Daylight Saving Time
|
||||||
|
# (America/Detroit)
|
||||||
|
# (America/Grand_Turk)
|
||||||
|
# (America/Indiana/Indianapolis)
|
||||||
|
# (America/Indiana/Knox)
|
||||||
|
# (America/Indiana/Marengo)
|
||||||
|
# (America/Indiana/Vevay)
|
||||||
|
# (America/Iqaluit)
|
||||||
|
# (America/Kentucky/Louisville)
|
||||||
|
# (America/Kentucky/Monticello)
|
||||||
|
# (America/Montreal)
|
||||||
|
# (America/Nassau)
|
||||||
|
# (America/New_York)
|
||||||
|
# (America/Nipigon)
|
||||||
|
# (America/Pangnirtung)
|
||||||
|
# (America/Thunder_Bay)
|
||||||
|
# (America/Toronto)
|
||||||
|
EGST 0 D # East Greenland Summer Time
|
||||||
|
# (America/Scoresbysund)
|
||||||
|
EGT -3600 # East Greenland Time (Svalbard & Jan Mayen)
|
||||||
|
# (America/Scoresbysund)
|
||||||
|
# CONFLICT! EST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - EST: Eastern Standard Time (Australia)
|
||||||
|
EST -18000 # Eastern Standard Time (America)
|
||||||
|
# (America/Cayman)
|
||||||
|
# (America/Coral_Harbour)
|
||||||
|
# (America/Detroit)
|
||||||
|
# (America/Grand_Turk)
|
||||||
|
# (America/Indiana/Indianapolis)
|
||||||
|
# (America/Indiana/Knox)
|
||||||
|
# (America/Indiana/Marengo)
|
||||||
|
# (America/Indiana/Vevay)
|
||||||
|
# (America/Iqaluit)
|
||||||
|
# (America/Jamaica)
|
||||||
|
# (America/Kentucky/Louisville)
|
||||||
|
# (America/Kentucky/Monticello)
|
||||||
|
# (America/Montreal)
|
||||||
|
# (America/Nassau)
|
||||||
|
# (America/New_York)
|
||||||
|
# (America/Nipigon)
|
||||||
|
# (America/Panama)
|
||||||
|
# (America/Pangnirtung)
|
||||||
|
# (America/Thunder_Bay)
|
||||||
|
# (America/Toronto)
|
||||||
|
FNT -7200 # Fernando de Noronha Time
|
||||||
|
# (America/Noronha)
|
||||||
|
FNST -3600 D # Fernando de Noronha Summer Time (not in zic)
|
||||||
|
# (America/Noronha)
|
||||||
|
GFT -10800 # French Guiana Time
|
||||||
|
# (America/Cayenne)
|
||||||
|
GYT -14400 # Guyana Time
|
||||||
|
# (America/Guyana)
|
||||||
|
MDT -21600 D # Mexico Mountain Daylight Time
|
||||||
|
# Mountain Daylight Time
|
||||||
|
# (America/Boise)
|
||||||
|
# (America/Cambridge_Bay)
|
||||||
|
# (America/Chihuahua)
|
||||||
|
# (America/Denver)
|
||||||
|
# (America/Edmonton)
|
||||||
|
# (America/Inuvik)
|
||||||
|
# (America/Mazatlan)
|
||||||
|
# (America/Yellowknife)
|
||||||
|
MST -25200 # Mexico Mountain Standard Time
|
||||||
|
# Mountain Standard Time
|
||||||
|
# (America/Boise)
|
||||||
|
# (America/Cambridge_Bay)
|
||||||
|
# (America/Chihuahua)
|
||||||
|
# (America/Dawson_Creek)
|
||||||
|
# (America/Denver)
|
||||||
|
# (America/Edmonton)
|
||||||
|
# (America/Hermosillo)
|
||||||
|
# (America/Inuvik)
|
||||||
|
# (America/Mazatlan)
|
||||||
|
# (America/Phoenix)
|
||||||
|
# (America/Yellowknife)
|
||||||
|
NDT -9000 D # Newfoundland Daylight Time
|
||||||
|
# (America/St_Johns)
|
||||||
|
NST -12600 # Newfoundland Standard Time
|
||||||
|
# (America/St_Johns)
|
||||||
|
PET -18000 # Peru Time (not in zic)
|
||||||
|
PDT -25200 D # Pacific Daylight Time
|
||||||
|
# (America/Dawson)
|
||||||
|
# (America/Los_Angeles)
|
||||||
|
# (America/Tijuana)
|
||||||
|
# (America/Vancouver)
|
||||||
|
# (America/Whitehorse)
|
||||||
|
PMDT -7200 D # Pierre & Miquelon Daylight Time
|
||||||
|
# (America/Miquelon)
|
||||||
|
PMST -10800 # Pierre & Miquelon Standard Time
|
||||||
|
# (America/Miquelon)
|
||||||
|
PST -28800 # Pacific Standard Time
|
||||||
|
# (America/Dawson)
|
||||||
|
# (America/Los_Angeles)
|
||||||
|
# (America/Tijuana)
|
||||||
|
# (America/Vancouver)
|
||||||
|
# (America/Whitehorse)
|
||||||
|
# (Pacific/Pitcairn)
|
||||||
|
PYST -10800 D # Paraguay Summer Time
|
||||||
|
# (America/Asuncion)
|
||||||
|
PYT -14400 # Paraguay Time
|
||||||
|
# (America/Asuncion)
|
||||||
|
UYST -7200 D # Uruguay Summer Time (not in zic)
|
||||||
|
UYT -10800 # Uruguay Time (not in zic)
|
||||||
|
VET -14400 # Venezuela Time
|
||||||
|
# (America/Caracas)
|
||||||
|
WGST -7200 D # Western Greenland Summer Time
|
||||||
|
# (America/Godthab)
|
||||||
|
WGT -10800 # West Greenland Time
|
||||||
|
# (America/Godthab)
|
||||||
|
|
||||||
|
#################### ANTARCTICA ####################
|
||||||
|
|
||||||
|
DAVT 25200 # Davis Time (Antarctica)
|
||||||
|
# (Antarctica/Davis)
|
||||||
|
DDUT 36000 # Dumont-d'Urville Time (Antarctica)
|
||||||
|
# (Antarctica/DumontDUrville)
|
||||||
|
# (Antarctica/Palmer)
|
||||||
|
# (America/Santiago)
|
||||||
|
MAWT 21600 # Mawson Time (Antarctica)
|
||||||
|
# (Antarctica/Mawson)
|
||||||
|
|
||||||
|
#################### ASIA ####################
|
||||||
|
|
||||||
|
AFT 16200 # Afghanistan Time
|
||||||
|
# (Asia/Kabul)
|
||||||
|
ALMT 21600 # Alma-Ata Time
|
||||||
|
# (Asia/Almaty)
|
||||||
|
ALMST 25200 D # Alma-Ata Summer Time
|
||||||
|
# (Asia/Almaty)
|
||||||
|
AMST 18000 D # Armenia Summer Time
|
||||||
|
# (Asia/Yerevan)
|
||||||
|
# CONFLICT! AMT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AMT: Amazon Time (America)
|
||||||
|
AMT 14400 # Armenia Time
|
||||||
|
# (Asia/Yerevan)
|
||||||
|
ANAST 46800 D # Anadyr Summer Time
|
||||||
|
# (Asia/Anadyr)
|
||||||
|
ANAT 43200 # Anadyr Time
|
||||||
|
# (Asia/Anadyr)
|
||||||
|
AZST 18000 D # Azerbaijan Summer Time
|
||||||
|
# (Asia/Baku)
|
||||||
|
AZT 14400 # Azerbaijan Time
|
||||||
|
# (Asia/Baku)
|
||||||
|
BDT 21600 # Bangladesh Time
|
||||||
|
# (Asia/Dhaka)
|
||||||
|
BNT 28800 # Brunei Darussalam Time
|
||||||
|
# (Asia/Brunei)
|
||||||
|
BORT 28800 # Borneo Time (Indonesia) (not in zic)
|
||||||
|
BTT 21600 # Bhutan Time
|
||||||
|
# (Asia/Thimphu)
|
||||||
|
CCT 28800 # China Coastal Time (not in zic)
|
||||||
|
GEST 14400 D # Georgia Summer Time (there was a timezone change in 2004)
|
||||||
|
# (Asia/Tbilisi)
|
||||||
|
GET 10800 # Georgia Time (there was a timezone change in 2004)
|
||||||
|
# (Asia/Tbilisi)
|
||||||
|
HKT 28800 # Hong Kong Time (not in zic)
|
||||||
|
ICT 25200 # Indochina Time
|
||||||
|
# (Asia/Bangkok)
|
||||||
|
# (Asia/Phnom_Penh)
|
||||||
|
# (Asia/Saigon)
|
||||||
|
# (Asia/Vientiane)
|
||||||
|
IRKST 32400 D # Irkutsk Summer Time
|
||||||
|
# (Asia/Irkutsk)
|
||||||
|
IRKT 28800 # Irkutsk Time
|
||||||
|
# (Asia/Irkutsk)
|
||||||
|
IRT 12600 # Iran Time (not in zic)
|
||||||
|
# CONFLICT! IST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - IST: Irish Summer Time (Europe)
|
||||||
|
# - IST: Indian Standard Time (Asia)
|
||||||
|
IST 7200 # Israel Standard Time (not in zic)
|
||||||
|
JAYT 32400 # Jayapura Time (Indonesia) (not in zic)
|
||||||
|
KDT 36000 D # Korean Daylight Time (not in zic)
|
||||||
|
KGST 21600 D # Kyrgyzstan Summer Time
|
||||||
|
# (Asia/Bishkek)
|
||||||
|
KGT 18000 # Kyrgyzstan Time
|
||||||
|
# (Asia/Bishkek)
|
||||||
|
KRAST 28800 D # Krasnoyarsk Summer Time
|
||||||
|
# (Asia/Krasnoyarsk)
|
||||||
|
KRAT 25200 # Krasnoyarsk Time
|
||||||
|
# (Asia/Krasnoyarsk)
|
||||||
|
KST 32400 # Korean Standard Time
|
||||||
|
# (Asia/Pyongyang)
|
||||||
|
LKT 21600 # Lanka Time
|
||||||
|
# (Asia/Colombo)
|
||||||
|
MAGST 43200 D # Magadan Summer Time
|
||||||
|
# (Asia/Magadan)
|
||||||
|
MAGT 39600 # Magadan Time
|
||||||
|
# (Asia/Magadan)
|
||||||
|
MMT 23400 # Myanmar Time
|
||||||
|
# (Asia/Rangoon)
|
||||||
|
MYT 28800 # Malaysia Time
|
||||||
|
# (Asia/Kuala_Lumpur)
|
||||||
|
# (Asia/Kuching)
|
||||||
|
NOVST 25200 D # Novosibirsk Summer Time
|
||||||
|
# (Asia/Novosibirsk)
|
||||||
|
NOVT 21600 # Novosibirsk Time
|
||||||
|
# (Asia/Novosibirsk)
|
||||||
|
NPT 20700 # Nepal Time
|
||||||
|
# (Asia/Katmandu)
|
||||||
|
OMSST 25200 D # Omsk Summer Time
|
||||||
|
# (Asia/Omsk)
|
||||||
|
OMST 21600 # Omsk Time
|
||||||
|
# (Asia/Omsk)
|
||||||
|
PETST 46800 D # Petropavlovsk-Kamchatski Summer Time
|
||||||
|
# (Asia/Kamchatka)
|
||||||
|
PETT 43200 # Petropavlovsk-Kamchatski Time
|
||||||
|
# (Asia/Kamchatka)
|
||||||
|
PHT 28800 # Phillipine Time (not in zic)
|
||||||
|
PKT 18000 # Pakistan Time (not in zic)
|
||||||
|
TJT 18000 # Tajikistan Time
|
||||||
|
# (Asia/Dushanbe)
|
||||||
|
TMT 18000 # Turkmenistan Time
|
||||||
|
# (Asia/Ashgabat)
|
||||||
|
ULAST 32400 D # Ulan Bator Summer Time
|
||||||
|
# (Asia/Ulaanbaatar)
|
||||||
|
ULAT 28800 # Ulan Bator Time
|
||||||
|
# (Asia/Ulaanbaatar)
|
||||||
|
UZST 21600 D # Uzbekistan Summer Time
|
||||||
|
# (Asia/Samarkand)
|
||||||
|
# (Asia/Tashkent)
|
||||||
|
UZT 18000 # Uzbekistan Time
|
||||||
|
# (Asia/Samarkand)
|
||||||
|
# (Asia/Tashkent)
|
||||||
|
VLAST 39600 D # Vladivostok Summer Time
|
||||||
|
# (Asia/Vladivostok)
|
||||||
|
VLAT 36000 # Vladivostok Time
|
||||||
|
# (Asia/Vladivostok)
|
||||||
|
YAKST 36000 D # Yakutsk Summer Time
|
||||||
|
# (Asia/Yakutsk)
|
||||||
|
YAKT 32400 # Yakutsk Time
|
||||||
|
# (Asia/Yakutsk)
|
||||||
|
YEKST 21600 D # Yekaterinburg Summer Time
|
||||||
|
# (Asia/Yekaterinburg)
|
||||||
|
YEKT 18000 # Yekaterinburg Time
|
||||||
|
# (Asia/Yekaterinburg)
|
||||||
|
|
||||||
|
#################### ATLANTIC ####################
|
||||||
|
|
||||||
|
# CONFLICT! ADT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - ADT: Arabic Daylight Time (Asia)
|
||||||
|
ADT -10800 D # Atlantic Daylight Time
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Thule)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
# CONFLICT! AST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - AST: Arabic Standard Time (Asia)
|
||||||
|
# - AST: Al Manamah Standard Time (Asia) same offset as Arabia Standard Time
|
||||||
|
# - AST/ACT: Acre Standard Time (America) listed as ACT
|
||||||
|
# - AST: Anguilla Standard Time (America) same offset
|
||||||
|
# - AST: Antigua Standard Time (America) same offset
|
||||||
|
# - AST: Antilles Standard Time (America) same offset
|
||||||
|
AST -14400 # Atlantic Standard Time
|
||||||
|
# (America/Anguilla)
|
||||||
|
# (America/Antigua)
|
||||||
|
# (America/Aruba)
|
||||||
|
# (America/Curacao)
|
||||||
|
# (America/Dominica)
|
||||||
|
# (America/Glace_Bay)
|
||||||
|
# (America/Goose_Bay)
|
||||||
|
# (America/Grenada)
|
||||||
|
# (America/Guadeloupe)
|
||||||
|
# (America/Halifax)
|
||||||
|
# (America/Martinique)
|
||||||
|
# (America/Montserrat)
|
||||||
|
# (America/Port_of_Spain)
|
||||||
|
# (America/Puerto_Rico)
|
||||||
|
# (America/Santo_Domingo)
|
||||||
|
# (America/St_Kitts)
|
||||||
|
# (America/St_Lucia)
|
||||||
|
# (America/St_Thomas)
|
||||||
|
# (America/St_Vincent)
|
||||||
|
# (America/Thule)
|
||||||
|
# (America/Tortola)
|
||||||
|
# (Atlantic/Bermuda)
|
||||||
|
AZOST 0 D # Azores Summer Time
|
||||||
|
# (Atlantic/Azores)
|
||||||
|
AZOT -3600 # Azores Time
|
||||||
|
# (Atlantic/Azores)
|
||||||
|
FKST -10800 D # Falkland Islands Summer Time
|
||||||
|
# (Atlantic/Stanley)
|
||||||
|
FKT -14400 # Falkland Islands Time
|
||||||
|
# (Atlantic/Stanley)
|
||||||
|
|
||||||
|
#################### AUSTRALIA ####################
|
||||||
|
|
||||||
|
ACSST 37800 D # Central Australia (not in zic)
|
||||||
|
AESST 39600 D # Australia Eastern Summer Standard Time (not in zic)
|
||||||
|
AEST 36000 # Australia Eastern Standard Time (not in zic)
|
||||||
|
AWSST 32400 D # Australia Western Summer Standard Time (not in zic)
|
||||||
|
AWST 28800 # Australia Western Standard Time (not in zic)
|
||||||
|
CADT 37800 D # Central Australia Daylight-Saving Time (not in zic)
|
||||||
|
CAST 34200 # Central Australia Standard Time (not in zic)
|
||||||
|
LHDT 39600 D # Lord Howe Daylight Time, Australia (not in zic)
|
||||||
|
LHST 37800 # Lord Howe Standard Time (Australia)
|
||||||
|
# (Australia/Lord_Howe)
|
||||||
|
LIGT 36000 # Melbourne, Australia (not in zic)
|
||||||
|
NZT 43200 # New Zealand Time (not in zic)
|
||||||
|
SADT 37800 D # South Australian Daylight-Saving Time (not in zic)
|
||||||
|
SAST 34200 # South Australian Standard Time (not in zic)
|
||||||
|
WADT 28800 D # West Australian Daylight-Saving Time (not in zic)
|
||||||
|
WAST 25200 # West Australian Standard Time (not in zic)
|
||||||
|
WDT 32400 D # West Australian Daylight-Saving Time (not in zic)
|
||||||
|
|
||||||
|
#################### ETC ####################
|
||||||
|
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
UCT 0 # Universal Coordinated Time
|
||||||
|
# (Etc/UCT)
|
||||||
|
UT 0 # Universal Time (not in zic)
|
||||||
|
UTC 0 # Coordinated Universal Time
|
||||||
|
Z 0 # Zulu
|
||||||
|
ZULU 0 # Zulu
|
||||||
|
|
||||||
|
#################### EUROPE ####################
|
||||||
|
|
||||||
|
BST 3600 D # British Summer Time
|
||||||
|
# Brazil Standard Time
|
||||||
|
# Bering Summer Time
|
||||||
|
# (Europe/London)
|
||||||
|
BDST 7200 D # British Double Summer Time
|
||||||
|
CEST 7200 D # Central Europe Summer Time
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
CET 3600 # Central Europe Time
|
||||||
|
# (Africa/Algiers)
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
CETDST 7200 D # Central Europe Summer Time
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
EEST 10800 D # East-Egypt Summertime
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EET 7200 # East-Egypt Time
|
||||||
|
# Eastern Europe Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Africa/Tripoli)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EETDST 10800 D # East-Egypt Summertime
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
MEST 7200 D # Middle Europe Summer Time (not in zic)
|
||||||
|
MET 3600 # Middle Europe Time (not in zic)
|
||||||
|
METDST 7200 D # Middle Europe Summer Time (not in zic)
|
||||||
|
MEZ 3600 # Mitteleuropaeische Zeit (German) (not in zic)
|
||||||
|
MSD 14400 D # Moscow Daylight Time
|
||||||
|
# (Europe/Moscow)
|
||||||
|
MSK 10800 # Moscow Time
|
||||||
|
# (Europe/Moscow)
|
||||||
|
WET 0 # Western Europe Time
|
||||||
|
# (Africa/Casablanca)
|
||||||
|
# (Africa/El_Aaiun)
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
||||||
|
WETDST 3600 D # Western Europe Summer Time
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
||||||
|
|
||||||
|
#################### INDIAN ####################
|
||||||
|
|
||||||
|
CXT 25200 # Christmas Island Time (Indian Ocean)
|
||||||
|
# (Indian/Christmas)
|
||||||
|
IOT 21600 # British Indian Ocean Territory (Chagos) (there was a timezone change recently in 1996)
|
||||||
|
# (Indian/Chagos)
|
||||||
|
MUT 14400 # Mauritius Island Time
|
||||||
|
# (Indian/Mauritius)
|
||||||
|
MVT 18000 # Maldives Island Time
|
||||||
|
# (Indian/Maldives)
|
||||||
|
RET 14400 # Reunion Time
|
||||||
|
# (Indian/Reunion)
|
||||||
|
SCT 14400 # Seychelles Time
|
||||||
|
# (Indian/Mahe)
|
||||||
|
TFT 18000 # Kerguelen Time
|
||||||
|
# (Indian/Kerguelen)
|
||||||
|
|
||||||
|
#################### PACIFIC ####################
|
||||||
|
|
||||||
|
CHADT 49500 D # Chatham Daylight Time (New Zealand)
|
||||||
|
# (Pacific/Chatham)
|
||||||
|
CHAST 45900 # Chatham Standard Time (New Zealand)
|
||||||
|
# (Pacific/Chatham)
|
||||||
|
CKT 43200 # Cook Islands Time (not in zic)
|
||||||
|
EASST -18000 D # Easter Island Summer Time (Chile)
|
||||||
|
# (Pacific/Easter)
|
||||||
|
EAST -21600 # Easter Island Time (Chile)
|
||||||
|
# (Pacific/Easter)
|
||||||
|
FJST -46800 D # Fiji Summer Time (not in zic)
|
||||||
|
FJT -43200 # Fiji Time (not in zic)
|
||||||
|
GALT -21600 # Galapagos Time
|
||||||
|
# (Pacific/Galapagos)
|
||||||
|
GAMT -32400 # Gambier Time
|
||||||
|
# (Pacific/Gambier)
|
||||||
|
GILT 43200 # Gilbert Islands Time
|
||||||
|
# (Pacific/Tarawa)
|
||||||
|
HST -36000 # Hawaiian Standard Time
|
||||||
|
# (Pacific/Honolulu)
|
||||||
|
# (Pacific/Johnston)
|
||||||
|
KOST 39600 # Kosrae Time
|
||||||
|
# (Pacific/Kosrae)
|
||||||
|
LINT 50400 # Line Islands Time (Kiribati)
|
||||||
|
# (Pacific/Kiritimati)
|
||||||
|
MART -34200 # Marquesas Time
|
||||||
|
# (Pacific/Marquesas)
|
||||||
|
MHT 43200 # Kwajalein Time
|
||||||
|
# (Pacific/Kwajalein)
|
||||||
|
# (Pacific/Majuro)
|
||||||
|
MPT 36000 # North Mariana Islands Time (not in zic)
|
||||||
|
# CONFLICT! NFT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - NFT: Norfolk Time (Pacific)
|
||||||
|
NFT -12600 # Newfoundland Time (not in zic)
|
||||||
|
NUT -39600 # Niue Time
|
||||||
|
# (Pacific/Niue)
|
||||||
|
NZDT 46800 D # New Zealand Daylight Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
NZST 43200 # New Zealand Standard Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
PGT 36000 # Papua New Guinea Time
|
||||||
|
# (Pacific/Port_Moresby)
|
||||||
|
PHOT 46800 # Phoenix Islands Time (Kiribati)
|
||||||
|
# (Pacific/Enderbury)
|
||||||
|
PONT 39600 # Ponape Time (Micronesia)
|
||||||
|
# (Pacific/Ponape)
|
||||||
|
PWT 32400 # Palau Time
|
||||||
|
# (Pacific/Palau)
|
||||||
|
TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
|
||||||
|
# (Pacific/Tahiti)
|
||||||
|
TKT -36000 # Tokelau Time
|
||||||
|
# (Pacific/Fakaofo)
|
||||||
|
TOT 46800 # Tonga Time (not in zic)
|
||||||
|
TRUT 36000 # Truk Time (zic says "TRUT", other souces say "TRUK")
|
||||||
|
# (Pacific/Truk)
|
||||||
|
TVT 43200 # Tuvalu Time
|
||||||
|
# (Pacific/Funafuti)
|
||||||
|
VUT 39600 # Vanuata Time (not in zic)
|
||||||
|
WAKT 43200 # Wake Time
|
||||||
|
# (Pacific/Wake)
|
||||||
|
WFT 43200 # Wallis and Futuna Time
|
||||||
|
# (Pacific/Wallis)
|
||||||
|
YAPT 36000 # Yap Time (Micronesia) (not in zic)
|
||||||
|
|
33
src/timezone/tznames/Etc.txt
Normal file
33
src/timezone/tznames/Etc.txt
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
UCT 0 # Universal Coordinated Time
|
||||||
|
# (Etc/UCT)
|
||||||
|
UT 0 # Universal Time (not in zic)
|
||||||
|
UTC 0 # Coordinated Universal Time
|
||||||
|
# (Etc/UTC)
|
||||||
|
Z 0 # Zulu
|
||||||
|
ZULU 0 # Zulu
|
||||||
|
|
207
src/timezone/tznames/Europe.txt
Normal file
207
src/timezone/tznames/Europe.txt
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
BST 3600 D # British Summer Time
|
||||||
|
# Brazil Standard Time
|
||||||
|
# Bering Summer Time
|
||||||
|
# (Europe/London)
|
||||||
|
CEST 7200 D # Central Europe Summer Time
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
CET 3600 # Central Europe Time
|
||||||
|
# (Africa/Algiers)
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
CETDST 7200 D # Central Europe Summer Time
|
||||||
|
# (Africa/Ceuta)
|
||||||
|
# (Europe/Amsterdam)
|
||||||
|
# (Europe/Andorra)
|
||||||
|
# (Europe/Belgrade)
|
||||||
|
# (Europe/Berlin)
|
||||||
|
# (Europe/Brussels)
|
||||||
|
# (Europe/Budapest)
|
||||||
|
# (Europe/Copenhagen)
|
||||||
|
# (Europe/Gibraltar)
|
||||||
|
# (Europe/Luxembourg)
|
||||||
|
# (Europe/Madrid)
|
||||||
|
# (Europe/Malta)
|
||||||
|
# (Europe/Monaco)
|
||||||
|
# (Europe/Oslo)
|
||||||
|
# (Europe/Paris)
|
||||||
|
# (Europe/Prague)
|
||||||
|
# (Europe/Rome)
|
||||||
|
# (Europe/Stockholm)
|
||||||
|
# (Europe/Tirane)
|
||||||
|
# (Europe/Vaduz)
|
||||||
|
# (Europe/Vienna)
|
||||||
|
# (Europe/Warsaw)
|
||||||
|
# (Europe/Zurich)
|
||||||
|
EEST 10800 D # East-Egypt Summertime
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EET 7200 # East-Egypt Time
|
||||||
|
# Eastern Europe Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Africa/Tripoli)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
EETDST 10800 D # East-Egypt Summertime
|
||||||
|
# Eastern Europe Summer Time
|
||||||
|
# (Africa/Cairo)
|
||||||
|
# (Asia/Amman)
|
||||||
|
# (Asia/Beirut)
|
||||||
|
# (Asia/Damascus)
|
||||||
|
# (Asia/Gaza)
|
||||||
|
# (Asia/Nicosia)
|
||||||
|
# (Europe/Athens)
|
||||||
|
# (Europe/Bucharest)
|
||||||
|
# (Europe/Chisinau)
|
||||||
|
# (Europe/Helsinki)
|
||||||
|
# (Europe/Istanbul)
|
||||||
|
# (Europe/Kaliningrad)
|
||||||
|
# (Europe/Kiev)
|
||||||
|
# (Europe/Minsk)
|
||||||
|
# (Europe/Riga)
|
||||||
|
# (Europe/Simferopol)
|
||||||
|
# (Europe/Sofia)
|
||||||
|
# (Europe/Tallinn)
|
||||||
|
# (Europe/Uzhgorod)
|
||||||
|
# (Europe/Vilnius)
|
||||||
|
# (Europe/Zaporozhye)
|
||||||
|
GMT 0 # Greenwich Mean Time
|
||||||
|
# (Africa/Abidjan)
|
||||||
|
# (Africa/Bamako)
|
||||||
|
# (Africa/Banjul)
|
||||||
|
# (Africa/Bissau)
|
||||||
|
# (Africa/Conakry)
|
||||||
|
# (Africa/Dakar)
|
||||||
|
# (Africa/Lome)
|
||||||
|
# (Africa/Monrovia)
|
||||||
|
# (Africa/Nouakchott)
|
||||||
|
# (Africa/Ouagadougou)
|
||||||
|
# (Africa/Sao_Tome)
|
||||||
|
# (America/Danmarkshavn)
|
||||||
|
# (Atlantic/Reykjavik)
|
||||||
|
# (Atlantic/St_Helena)
|
||||||
|
# (Etc/GMT)
|
||||||
|
# (Europe/Dublin)
|
||||||
|
# (Europe/London)
|
||||||
|
# CONFLICT! IST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - IST: Indian Standard Time (Asia)
|
||||||
|
# - IST: Israel Standard Time (Asia)
|
||||||
|
IST 3600 D # Irish Summer Time
|
||||||
|
# (Europe/Dublin)
|
||||||
|
MEST 7200 D # Middle Europe Summer Time (not in zic)
|
||||||
|
MET 3600 # Middle Europe Time (not in zic)
|
||||||
|
METDST 7200 D # Middle Europe Summer Time (not in zic)
|
||||||
|
MEZ 3600 # Mitteleuropäische Zeit (German) (not in zic)
|
||||||
|
MSD 14400 D # Moscow Daylight Time
|
||||||
|
# (Europe/Moscow)
|
||||||
|
MSK 10800 # Moscow Time
|
||||||
|
# (Europe/Moscow)
|
||||||
|
SAMST 18000 D # Samara Summer Time
|
||||||
|
# (Europe/Samara)
|
||||||
|
SAMT 14400 # Samara Time
|
||||||
|
# (Europe/Samara)
|
||||||
|
WEST 3600 D # Western Europe Summer Time
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
||||||
|
WET 0 # Western Europe Time
|
||||||
|
# (Africa/Casablanca)
|
||||||
|
# (Africa/El_Aaiun)
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
||||||
|
WETDST 3600 D # Western Europe Summer Time
|
||||||
|
# (Atlantic/Canary)
|
||||||
|
# (Atlantic/Faeroe)
|
||||||
|
# (Atlantic/Madeira)
|
||||||
|
# (Europe/Lisbon)
|
12
src/timezone/tznames/India
Normal file
12
src/timezone/tznames/India
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Time zone configuration file for set "India"
|
||||||
|
|
||||||
|
# In order to use this file, you need to set the run-time parameter
|
||||||
|
# timezone_abbreviations to 'India'. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
|
||||||
|
|
||||||
|
# include the default set
|
||||||
|
@INCLUDE Default
|
||||||
|
|
||||||
|
IST 19800 # Indian Standard Time
|
||||||
|
# (Asia/Calcutta)
|
35
src/timezone/tznames/Indian.txt
Normal file
35
src/timezone/tznames/Indian.txt
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
CCT 23400 # Cocos Islands Time (Indian Ocean)
|
||||||
|
# (Indian/Cocos)
|
||||||
|
CXT 25200 # Christmas Island Time (Indian Ocean)
|
||||||
|
# (Indian/Christmas)
|
||||||
|
EAT 10800 # East Africa Time
|
||||||
|
# (Africa/Addis_Ababa)
|
||||||
|
# (Africa/Asmera)
|
||||||
|
# (Africa/Dar_es_Salaam)
|
||||||
|
# (Africa/Djibouti)
|
||||||
|
# (Africa/Kampala)
|
||||||
|
# (Africa/Khartoum)
|
||||||
|
# (Africa/Mogadishu)
|
||||||
|
# (Africa/Nairobi)
|
||||||
|
# (Indian/Antananarivo)
|
||||||
|
# (Indian/Comoro)
|
||||||
|
# (Indian/Mayotte)
|
||||||
|
IOT 21600 # British Indian Ocean Territory (Chagos) (there was a timezone change recently in 1996)
|
||||||
|
# (Indian/Chagos)
|
||||||
|
MUT 14400 # Mauritius Island Time
|
||||||
|
# (Indian/Mauritius)
|
||||||
|
MVT 18000 # Maldives Island Time
|
||||||
|
# (Indian/Maldives)
|
||||||
|
RET 14400 # Reunion Time
|
||||||
|
# (Indian/Reunion)
|
||||||
|
SCT 14400 # Seychelles Time
|
||||||
|
# (Indian/Mahe)
|
||||||
|
TFT 18000 # Kerguelen Time
|
||||||
|
# (Indian/Kerguelen)
|
30
src/timezone/tznames/Makefile
Normal file
30
src/timezone/tznames/Makefile
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#-------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Makefile
|
||||||
|
# Makefile for the timezone names
|
||||||
|
|
||||||
|
# IDENTIFICATION
|
||||||
|
# $PostgreSQL: pgsql/src/timezone/tznames/Makefile,v 1.1 2006/07/25 03:51:23 tgl Exp $
|
||||||
|
#
|
||||||
|
#-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
subdir = src/timezone/tznames
|
||||||
|
top_builddir = ../../..
|
||||||
|
include $(top_builddir)/src/Makefile.global
|
||||||
|
|
||||||
|
TZNAMES_TEMPLATES := Africa.txt America.txt Antarctica.txt Asia.txt \
|
||||||
|
Atlantic.txt Australia.txt Etc.txt Europe.txt Indian.txt Pacific.txt
|
||||||
|
TZNAMES_TEMPLATES_FILES := $(TZNAMES_TEMPLATES:%=$(srcdir)/%)
|
||||||
|
|
||||||
|
TZNAMES_SETS := Default Australia India
|
||||||
|
TZNAMES_SETS_FILES := $(TZNAMES_SETS:%=$(srcdir)/%)
|
||||||
|
|
||||||
|
install: installdirs
|
||||||
|
$(INSTALL_DATA) $(TZNAMES_TEMPLATES_FILES) '$(DESTDIR)$(datadir)/timezonesets'
|
||||||
|
$(INSTALL_DATA) $(TZNAMES_SETS_FILES) '$(DESTDIR)$(datadir)/timezonesets'
|
||||||
|
|
||||||
|
installdirs:
|
||||||
|
$(mkinstalldirs) '$(DESTDIR)$(datadir)/timezonesets'
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
rm -rf '$(DESTDIR)$(datadir)/timezonesets'
|
100
src/timezone/tznames/Pacific.txt
Normal file
100
src/timezone/tznames/Pacific.txt
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#
|
||||||
|
# NOTE:
|
||||||
|
# This file is NOT loaded by the PostgreSQL database. It just serves as
|
||||||
|
# a template for timezones you could need. See the `Date/Time Support'
|
||||||
|
# appendix in the PostgreSQL documentation for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
CHADT 49500 D # Chatham Daylight Time (New Zealand)
|
||||||
|
# (Pacific/Chatham)
|
||||||
|
CHAST 45900 # Chatham Standard Time (New Zealand)
|
||||||
|
# (Pacific/Chatham)
|
||||||
|
ChST 36000 # Chamorro Standard Time (lower case "h" is as in zic)
|
||||||
|
# (Pacific/Guam)
|
||||||
|
# (Pacific/Saipan)
|
||||||
|
CKT 43200 # Cook Islands Time (not in zic)
|
||||||
|
EASST -18000 D # Easter Island Summer Time (Chile)
|
||||||
|
# (Pacific/Easter)
|
||||||
|
# CONFLICT! EAST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - EAST: East Australian Standard Time (Australia)
|
||||||
|
EAST -21600 # Easter Island Time (Chile)
|
||||||
|
# (Pacific/Easter)
|
||||||
|
FJST -46800 D # Fiji Summer Time (not in zic)
|
||||||
|
FJT -43200 # Fiji Time (not in zic)
|
||||||
|
GALT -21600 # Galapagos Time
|
||||||
|
# (Pacific/Galapagos)
|
||||||
|
GAMT -32400 # Gambier Time
|
||||||
|
# (Pacific/Gambier)
|
||||||
|
GILT 43200 # Gilbert Islands Time
|
||||||
|
# (Pacific/Tarawa)
|
||||||
|
HST -36000 # Hawaiian Standard Time
|
||||||
|
# (Pacific/Honolulu)
|
||||||
|
# (Pacific/Johnston)
|
||||||
|
KOST 39600 # Kosrae Time
|
||||||
|
# (Pacific/Kosrae)
|
||||||
|
LINT 50400 # Line Islands Time (Kiribati)
|
||||||
|
# (Pacific/Kiritimati)
|
||||||
|
MART -34200 # Marquesas Time
|
||||||
|
# (Pacific/Marquesas)
|
||||||
|
MHT 43200 # Kwajalein Time
|
||||||
|
# (Pacific/Kwajalein)
|
||||||
|
# (Pacific/Majuro)
|
||||||
|
MPT 36000 # North Mariana Islands Time (not in zic)
|
||||||
|
NCT 39600 # New Caledonia Time (not in zic)
|
||||||
|
# CONFLICT! NFT is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - NFT: Newfoundland Time (America)
|
||||||
|
NFT 41400 # Norfolk Time
|
||||||
|
# (Pacific/Norfolk)
|
||||||
|
NRT 43200 # Nauru Time
|
||||||
|
# (Pacific/Nauru)
|
||||||
|
NUT -39600 # Niue Time
|
||||||
|
# (Pacific/Niue)
|
||||||
|
NZDT 46800 D # New Zealand Daylight Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
NZST 43200 # New Zealand Standard Time
|
||||||
|
# (Antarctica/McMurdo)
|
||||||
|
# (Pacific/Auckland)
|
||||||
|
PGT 36000 # Papua New Guinea Time
|
||||||
|
# (Pacific/Port_Moresby)
|
||||||
|
PHOT 46800 # Phoenix Islands Time (Kiribati)
|
||||||
|
# (Pacific/Enderbury)
|
||||||
|
PONT 39600 # Ponape Time (Micronesia)
|
||||||
|
# (Pacific/Ponape)
|
||||||
|
PST -28800 # Pacific Standard Time
|
||||||
|
# (America/Dawson)
|
||||||
|
# (America/Los_Angeles)
|
||||||
|
# (America/Tijuana)
|
||||||
|
# (America/Vancouver)
|
||||||
|
# (America/Whitehorse)
|
||||||
|
# (Pacific/Pitcairn)
|
||||||
|
PWT 32400 # Palau Time
|
||||||
|
# (Pacific/Palau)
|
||||||
|
SBT 39600 # Solomon Islands Time
|
||||||
|
# (Pacific/Guadalcanal)
|
||||||
|
SST -39600 # South Sumatran Time
|
||||||
|
# (Pacific/Midway)
|
||||||
|
# (Pacific/Pago_Pago)
|
||||||
|
TAHT -36000 # Tahiti Time (zic says "TAHT", other sources "THAT")
|
||||||
|
# (Pacific/Tahiti)
|
||||||
|
TKT -36000 # Tokelau Time
|
||||||
|
# (Pacific/Fakaofo)
|
||||||
|
TOT 46800 # Tonga Time (not in zic)
|
||||||
|
TRUT 36000 # Truk Time (zic says "TRUT", other souces say "TRUK")
|
||||||
|
# (Pacific/Truk)
|
||||||
|
TVT 43200 # Tuvalu Time
|
||||||
|
# (Pacific/Funafuti)
|
||||||
|
VUT 39600 # Vanuata Time (not in zic)
|
||||||
|
WAKT 43200 # Wake Time
|
||||||
|
# (Pacific/Wake)
|
||||||
|
WFT 43200 # Wallis and Futuna Time
|
||||||
|
# (Pacific/Wallis)
|
||||||
|
# CONFLICT! WST is not unique
|
||||||
|
# Other timezones:
|
||||||
|
# - WST: Western Standard Time (Australia)
|
||||||
|
WST -39600 # West Samoa Time
|
||||||
|
# (Pacific/Apia)
|
||||||
|
YAPT 36000 # Yap Time (Micronesia) (not in zic)
|
||||||
|
|
18
src/timezone/tznames/README
Normal file
18
src/timezone/tznames/README
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
This directory contains files with timezone sets for PostgreSQL. The problem
|
||||||
|
is that time zone abbreviations are not unique throughout the world and you
|
||||||
|
might find out that a time zone abbreviation in the `Default' set collides
|
||||||
|
with the one you wanted to use. All other files except for `Default' are
|
||||||
|
intended to override values from the `Default' set. So you might already have
|
||||||
|
a file here that serves your needs. If not, you can create your own.
|
||||||
|
|
||||||
|
In order to use one of these files, you need to set
|
||||||
|
|
||||||
|
timezone_abbreviations = 'xyz'
|
||||||
|
|
||||||
|
in any of the usual ways for setting a parameter, where xyz is the filename
|
||||||
|
that contains the desired time zone names.
|
||||||
|
|
||||||
|
If you do not find an appropriate set of time zone names for your geographic
|
||||||
|
location supplied here, please report this to <pgsql-hackers@postgresql.org>.
|
||||||
|
Your set of time zone names can then be included in future releases.
|
||||||
|
For the time being you can always add your own set.
|
Loading…
x
Reference in New Issue
Block a user