広範囲で、地域をまたがった時間帯情報へアクセスできるような Unix 系の標準システムインターフェイスが無いので、 PostgreSQL は時間帯解読用として内部的に表形式での情報を持っています。とはいっても、使用している OS は 出力 に対し、時間帯情報を提供することになっています。
PostgreSQL が認識できる以下の時間帯テーブルはアルファベット順ではなく UTC からの時間帯による隔たりの順で構成されています。これは、認識された簡略形が違っていても、ローカルの使用法と一致させることが容易にできるよう意図されています。
Table A-4. PostgreSQL が認識できる時間帯
時間帯 | UTC からの隔たり | 説明 |
---|---|---|
NZDT | +13:00 | New Zealand Daylight Time(ニュージーランド夏時間) |
IDLE | +12:00 | International Date Line, East(国際日付変更線の東側) |
NZST | +12:00 | New Zealand Standard Time(ニュージーランド標準時間) |
NZT | +12:00 | New Zealand Time(ニュージーランド時間) |
AESST | +11:00 | Australia Eastern Summer Standard Time(オーストラリア東部夏時間) |
ACSST | +10:30 | Central Australia Summer Standard Time(オーストラリア中部標準夏時間) |
CADT | +10:30 | Central Australia Daylight Savings Time(オーストラリア中部夏時間) |
SADT | +10:30 | South Australian Daylight Time(オーストラリア南部夏時間) |
AEST | +10:00 | Australia Eastern Standard Time(オーストラリア東部標準時間) |
EAST | +10:00 | East Australian Standard Time(東部オーストラリア標準時間) |
GST | +10:00 | Guam Standard Time, USSR Zone 9(グアム標準時間、ソビエト地域9時間) |
LIGT | +10:00 | Melbourne, Australia(オーストラリア、メルボルン時間) |
SAST | +09:30 | South Australia Standard Time(オーストラリア南部標準時間) |
CAST | +09:30 | Central Australia Standard Time(オーストラリア中部標準時間) |
AWSST | +09:00 | Australia Western Summer Standard Time(オーストラリア西部夏時間) |
JST | +09:00 | Japan Standard Time,USSR Zone 8(日本標準時間、ソビエト地域8時間) |
KST | +09:00 | Korea Standard Time(韓国標準時間) |
MHT | +09:00 | Kwajalein Time(マーシャル群島、クワジュリン時間) |
WDT | +09:00 | West Australian Daylight Time(オーストラリア西部夏時間) |
MT | +08:30 | Moluccas Time(モルッカ諸島時間) |
AWST | +08:00 | Australia Western Standard Time(オーストラリア西部標準時間) |
CCT | +08:00 | China Coastal Time(中国湾岸時間) |
WADT | +08:00 | West Australian Daylight Time(西部オーストラリア夏時間) |
WST | +08:00 | West Australian Standard Time(西部オーストラリア標準時間) |
JT | +07:30 | Java Time(ジャワ島時間) |
ALMST | +07:00 | Almaty Summer Time(アルマトイ夏時間) |
WAST | +07:00 | West Australian Standard Time(西部オーストラリア標準時間) |
CXT | +07:00 | Christmas (Island) Time(クリスマス島時間) |
ALMT | +06:00 | Almaty Time(アルマトイ時間) |
MAWT | +06:00 | Mawson (Antarctica) Time(モーソン(南極大陸)時間) |
IOT | +05:00 | Indian Chagos Time(インドチャゴス時間) |
MVT | +05:00 | Maldives Island Time(モルディブ島時間) |
TFT | +05:00 | Kerguelen Time(ケルゲレン諸島時間) |
AFT | +04:30 | Afganistan Time(アフガニスタン時間) |
EAST | +04:00 | Antananarivo Savings Time(マダガスカル、アンタナナリボ夏時間) |
MUT | +04:00 | Mauritius Island Time(モーリシャス島時間) |
RET | +04:00 | Reunion Island Time(レユニオン島時間) |
SCT | +04:00 | Mahe Island Time(マーヘ島時間) |
IT | +03:30 | Iran Time(イラン時間) |
EAT | +03:00 | Antananarivo, Comoro Time(アンタナナリボ、コモロ時間) |
BT | +03:00 | Baghdad Time(バクダッド時間) |
EETDST | +03:00 | Eastern Europe Daylight Savings Time(東ヨーロッパ夏時間) |
HMT | +03:00 | Hellas Mediterranean Time (?)(ギリシャ、ヘラ地中海時間 (?)) |
BDST | +02:00 | British Double Standard Time(英国二重標準時間) |
CEST | +02:00 | Central European Savings Time(中央ヨーロッパ夏時間) |
CETDST | +02:00 | Central European Daylight Savings Time(中央ヨーロッパ夏時間) |
EET | +02:00 | Eastern Europe, USSR Zone 1(東ヨーロッパ時間、ソビエト地域1時間) |
FWT | +02:00 | French Winter Time(フランス冬時間) |
IST | +02:00 | Israel Standard Time(イスラエル標準時間) |
MEST | +02:00 | Middle Europe Summer Time(中央ヨーロッパ夏時間) |
METDST | +02:00 | Middle Europe Daylight Time(中央ヨーロッパ夏時間) |
SST | +02:00 | Swedish Summer Time(スウェーデン夏時間) |
BST | +01:00 | British Summer Time(英国夏時間) |
CET | +01:00 | Central European Time(中央ヨーロッパ時間) |
DNT | +01:00 | Dansk Normal Tid(デンマーク標準時間) |
FST | +01:00 | French Summer Time(フランス夏時間) |
MET | +01:00 | Middle Europe Time(中央ヨーロッパ時間) |
MEWT | +01:00 | Middle Europe Winter Time(中央ヨーロッパ冬時間) |
MEZ | +01:00 | Middle Europe Zone(中央ヨーロッパ地域時間) |
NOR | +01:00 | Norway Standard Time(ノルウェー標準時間) |
SET | +01:00 | Seychelles Time(セイシェル時間) |
SWT | +01:00 | Swedish Winter Time(スウェーデン冬時間) |
WETDST | +01:00 | Western Europe Daylight Savings Time(西ヨーロッパ夏時間) |
GMT | +00:00 | Greenwich Mean Time(グリニッジ標準時) |
UT | +00:00 | Universal Time (万国共通時間) |
UTC | +00:00 | Universal Time, Coordinated(統合万国用通時間) |
Z | +00:00 | UTC と同じ |
ZULU | +00:00 | UTC と同じ |
WET | +00:00 | Western Europe Time(西ヨーロッパ時間) |
WAT | -01:00 | West Africa Time(西アフリカ時間) |
NDT | -02:30 | Newfoundland Daylight Time(ニューファンドランド夏時間) |
ADT | -03:00 | Atlantic Daylight Time(大西洋夏時間) |
AWT | -03:00 | (不明) |
NFT | -03:30 | Newfoundland Standard Time(ニューファンドランド標準時間) |
NST | -03:30 | Newfoundland Standard Time(ニューファンドランド標準時間) |
AST | -04:00 | Atlantic Standard Time (Canada)(大西洋標準時間(カナダ)) |
ACST | -04:00 | Atlantic/Porto Acre Summer Time(大西洋/ポルトアクリ夏時間) |
ACT | -05:00 | Atlantic/Porto Acre Summer Time(大西洋/ポルトアクリ標準時間) |
EDT | -04:00 | Eastern Daylight Time(米国東部夏時間) |
CDT | -05:00 | Central Daylight Time(米国中部夏時間) |
EST | -05:00 | Eastern Standard Time(米国東部標準時間) |
CST | -06:00 | Central Std Time(米国中部標準時間) |
MDT | -06:00 | Mountain Standard Time(米国山岳部標準時間) |
MST | -07:00 | Mountain Standard Time(米国山岳部標準時間) |
PDT | -07:00 | Pacific Daylight Time(米国太平洋夏時間) |
AKDT | -08:00 | Alaska Daylight Time(アラスカ夏時間) |
PST | -08:00 | Pacific Standard Time(米国太平洋標準時間) |
YDT | -08:00 | Yukon Daylight Time(ユーコン夏時間) |
AKST | -09:00 | Alaska Standard Time(アラスカ標準時間) |
HDT | -09:00 | Hawaii/Alaska Daylight Time(ハワイ/アラスカ夏時間) |
YST | -09:00 | Yukon Standard Time(ユーコン標準時間) |
AHST | -10:00 | Alaska-Hawaii Standard Time(ハワイ/アラスカ標準時間) |
HST | -10:00 | Hawaii Standard Time(ハワイ標準時間) |
CAT | -10:00 | Central Alaska Time(アラスカ中央時間) |
NT | -11:00 | Nome Time(ノーム時間) |
IDLW | -12:00 | International Date Line, West(国際日付変更線の西側) |
オーストラリアの時間帯とその名称の異形が PostgreSQL の時間帯参照テーブルのすべての時間帯の 4 分の 1 を占めています。米国でも使用頻度の高い CST と EST の2 つの時間帯名称が競合しています。
実行時オプションに AUSTRALIAN_TIMEZONES が設定されている場合、CST、EST、SAT はオーストラリア時間帯の名称と解釈されます。このオプションが無い場合、 CST と EST は米国時間帯の名称と見なされますが、SAT は Saturday をほのめかすノイズと解釈されます。
日付/時刻データ型はすべて共通の決まったルーチンで解読されます。
日付/時刻入力の解釈
入力文字列をトークンに分割し、そしてそれぞれのトークンを文字列、時刻、時間帯、または数値というように分類します。
もし数値トークンにコロン(「:」)があった場合は時刻文字列です。そこに続くすべての数字とコロンを含みます。
もし数値トークンにハイフン(「-」)、スラッシュ(「/」)、2 つ以上の点(「.」)があった場合はテキストの月名がある日付文字列です。
もしトークンが数値だけの場合、それは単項、もしくはISO-8601の連結形式の日付(例:1999 年 1月 13 日 を示す 19990113)、あるいは時刻(例:14:15:16 を示す 141516) のいずれかです。
もしトークンが、プラス記号(「+」)あるいはマイナス記号(「-」)で始まっている場合は時間帯フィールドか特殊なフィールドです。
もしトークンがテキスト文字列の場合、可能性のある文字列と照合されます。
トークンに対して参照テーブルをバイナリ検索し、(today のような)特殊文字列か、(Thursday のような)曜日か、(January のような)月か、あるいは(at や on のような)ノイズかを判定します。
フィールドの値とフィールドのビットマスクを設定します。例えば、 today に年、月、日を設定し、それに追加して now に時、分、秒を設定します。
探索できなかった場合は類似の時間帯に見合うトークンに対しバイナリ検索を参照テーブルに掛けます。
それでも探し出せなかった場合、エラーを返します。
トークンは数値あるいは数値フィールドです。
トークンが 4 桁以上で、さらに他のどんな日付フィールドも前に読まれていない場合は"連結された日付"(例えば、 19990118)として解釈されます。8 桁と 6 桁の場合は年、月、日と解釈され、7 桁と 5 桁の場合、年と日数と解釈されます。
もしトークンが 3 桁で年がすでに解読されていた場合は日数と解釈されます。
4 桁または 6 桁の場合で年がすでに読み込まれている時は時刻と解釈されます。
4 桁以上の場合は年と解釈されます。
ヨーロッパ日付形式で日のフィールドが読まれておらず、その値が 31 以下の場合は日と解釈されます。
月のフィールドが読まれておらず、値が 12 以下の場合は月と解釈されます。
日のフィールドが読み込まれておらず、値が 31 以下の場合は日と解釈されます。
2 桁 もしくは 4 桁以上の場合は年と解釈されます。
それ以外はエラーとなります。
もし BC が指定された場合は内部格納用に年を負の数にして 1 を加えます(グレゴリオ暦にはゼロ年がないので、数値的には 1BC (紀元前1年)がゼロ年になります)。
BC が指定されず年フィールドの長さが 2 桁の場合年は 4 桁になるよう調整されます。そのフィールドが 70 未満の場合は 2000 が加えられますが、そのほかの場合には 1900 が加えられます。
Tip: (例えば、西暦 99 年を 0099 のように)グレゴリオ暦の西暦元年から 99 年までは、ゼロを前に付加して 4 桁入力することができます。以前のバージョンの PostgreSQL では 3 桁でも 1 桁でも入力が可能でしたが、7.0 時点で、あいまいさを減らすためルールが厳格になり、現在では利用できません。