他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

A.2. 時間帯

広範囲で、地域をまたがった時間帯情報へアクセスできるような Unix 系の標準システムインターフェイスが無いので、 PostgreSQL は時間帯解読用として内部的に表形式での情報を持っています。とはいっても、使用している OS は 出力 に対し、時間帯情報を提供することになっています

PostgreSQL が認識できる以下の時間帯テーブルはアルファベット順ではなく UTC からの時間帯による隔たりの順で構成されています。これは、認識された簡略形が違っていても、ローカルの使用法と一致させることが容易にできるよう意図されています。

Table A-4. PostgreSQL が認識できる時間帯

時間帯UTC からの隔たり説明
NZDT+13:00New Zealand Daylight Time(ニュージーランド夏時間)
IDLE+12:00International Date Line, East(国際日付変更線の東側)
NZST+12:00New Zealand Standard Time(ニュージーランド標準時間)
NZT+12:00New Zealand Time(ニュージーランド時間)
AESST+11:00Australia Eastern Summer Standard Time(オーストラリア東部夏時間)
ACSST+10:30Central Australia Summer Standard Time(オーストラリア中部標準夏時間)
CADT+10:30Central Australia Daylight Savings Time(オーストラリア中部夏時間)
SADT+10:30South Australian Daylight Time(オーストラリア南部夏時間)
AEST+10:00Australia Eastern Standard Time(オーストラリア東部標準時間)
EAST+10:00East Australian Standard Time(東部オーストラリア標準時間)
GST+10:00Guam Standard Time, USSR Zone 9(グアム標準時間、ソビエト地域9時間)
LIGT+10:00Melbourne, Australia(オーストラリア、メルボルン時間)
SAST+09:30South Australia Standard Time(オーストラリア南部標準時間)
CAST+09:30Central Australia Standard Time(オーストラリア中部標準時間)
AWSST+09:00Australia Western Summer Standard Time(オーストラリア西部夏時間)
JST+09:00Japan Standard Time,USSR Zone 8(日本標準時間、ソビエト地域8時間)
KST+09:00Korea Standard Time(韓国標準時間)
MHT+09:00Kwajalein Time(マーシャル群島、クワジュリン時間)
WDT+09:00West Australian Daylight Time(オーストラリア西部夏時間)
MT+08:30Moluccas Time(モルッカ諸島時間)
AWST+08:00Australia Western Standard Time(オーストラリア西部標準時間)
CCT+08:00China Coastal Time(中国湾岸時間)
WADT+08:00West Australian Daylight Time(西部オーストラリア夏時間)
WST+08:00West Australian Standard Time(西部オーストラリア標準時間)
JT+07:30Java Time(ジャワ島時間)
ALMST+07:00Almaty Summer Time(アルマトイ夏時間)
WAST+07:00West Australian Standard Time(西部オーストラリア標準時間)
CXT+07:00Christmas (Island) Time(クリスマス島時間)
ALMT+06:00Almaty Time(アルマトイ時間)
MAWT+06:00Mawson (Antarctica) Time(モーソン(南極大陸)時間)
IOT+05:00Indian Chagos Time(インドチャゴス時間)
MVT+05:00Maldives Island Time(モルディブ島時間)
TFT+05:00Kerguelen Time(ケルゲレン諸島時間)
AFT+04:30Afganistan Time(アフガニスタン時間)
EAST+04:00Antananarivo Savings Time(マダガスカル、アンタナナリボ夏時間)
MUT+04:00Mauritius Island Time(モーリシャス島時間)
RET+04:00Reunion Island Time(レユニオン島時間)
SCT+04:00Mahe Island Time(マーヘ島時間)
IT+03:30Iran Time(イラン時間)
EAT+03:00Antananarivo, Comoro Time(アンタナナリボ、コモロ時間)
BT+03:00Baghdad Time(バクダッド時間)
EETDST+03:00Eastern Europe Daylight Savings Time(東ヨーロッパ夏時間)
HMT+03:00Hellas Mediterranean Time (?)(ギリシャ、ヘラ地中海時間 (?))
BDST+02:00British Double Standard Time(英国二重標準時間)
CEST+02:00Central European Savings Time(中央ヨーロッパ夏時間)
CETDST+02:00Central European Daylight Savings Time(中央ヨーロッパ夏時間)
EET+02:00Eastern Europe, USSR Zone 1(東ヨーロッパ時間、ソビエト地域1時間)
FWT+02:00French Winter Time(フランス冬時間)
IST+02:00Israel Standard Time(イスラエル標準時間)
MEST+02:00Middle Europe Summer Time(中央ヨーロッパ夏時間)
METDST+02:00Middle Europe Daylight Time(中央ヨーロッパ夏時間)
SST+02:00Swedish Summer Time(スウェーデン夏時間)
BST+01:00British Summer Time(英国夏時間)
CET+01:00Central European Time(中央ヨーロッパ時間)
DNT+01:00Dansk Normal Tid(デンマーク標準時間)
FST+01:00French Summer Time(フランス夏時間)
MET+01:00Middle Europe Time(中央ヨーロッパ時間)
MEWT+01:00Middle Europe Winter Time(中央ヨーロッパ冬時間)
MEZ+01:00Middle Europe Zone(中央ヨーロッパ地域時間)
NOR+01:00Norway Standard Time(ノルウェー標準時間)
SET+01:00Seychelles Time(セイシェル時間)
SWT+01:00Swedish Winter Time(スウェーデン冬時間)
WETDST+01:00Western Europe Daylight Savings Time(西ヨーロッパ夏時間)
GMT+00:00Greenwich Mean Time(グリニッジ標準時)
UT+00:00Universal Time (万国共通時間)
UTC+00:00Universal Time, Coordinated(統合万国用通時間)
Z+00:00UTC と同じ
ZULU+00:00UTC と同じ
WET+00:00Western Europe Time(西ヨーロッパ時間)
WAT-01:00West Africa Time(西アフリカ時間)
NDT-02:30Newfoundland Daylight Time(ニューファンドランド夏時間)
ADT-03:00Atlantic Daylight Time(大西洋夏時間)
AWT-03:00(不明)
NFT-03:30Newfoundland Standard Time(ニューファンドランド標準時間)
NST-03:30Newfoundland Standard Time(ニューファンドランド標準時間)
AST-04:00Atlantic Standard Time (Canada)(大西洋標準時間(カナダ))
ACST-04:00Atlantic/Porto Acre Summer Time(大西洋/ポルトアクリ夏時間)
ACT-05:00Atlantic/Porto Acre Summer Time(大西洋/ポルトアクリ標準時間)
EDT-04:00Eastern Daylight Time(米国東部夏時間)
CDT-05:00Central Daylight Time(米国中部夏時間)
EST-05:00Eastern Standard Time(米国東部標準時間)
CST-06:00Central Std Time(米国中部標準時間)
MDT-06:00Mountain Standard Time(米国山岳部標準時間)
MST-07:00Mountain Standard Time(米国山岳部標準時間)
PDT-07:00Pacific Daylight Time(米国太平洋夏時間)
AKDT-08:00Alaska Daylight Time(アラスカ夏時間)
PST-08:00Pacific Standard Time(米国太平洋標準時間)
YDT-08:00Yukon Daylight Time(ユーコン夏時間)
AKST-09:00Alaska Standard Time(アラスカ標準時間)
HDT-09:00Hawaii/Alaska Daylight Time(ハワイ/アラスカ夏時間)
YST-09:00Yukon Standard Time(ユーコン標準時間)
AHST-10:00Alaska-Hawaii Standard Time(ハワイ/アラスカ標準時間)
HST-10:00Hawaii Standard Time(ハワイ標準時間)
CAT-10:00Central Alaska Time(アラスカ中央時間)
NT-11:00Nome Time(ノーム時間)
IDLW-12:00International Date Line, West(国際日付変更線の西側)

A.2.1. オーストラリア時間帯

オーストラリアの時間帯とその名称の異形が PostgreSQL の時間帯参照テーブルのすべての時間帯の 4 分の 1 を占めています。米国でも使用頻度の高い CSTEST の2 つの時間帯名称が競合しています。

実行時オプションに AUSTRALIAN_TIMEZONES が設定されている場合、CSTESTSAT はオーストラリア時間帯の名称と解釈されます。このオプションが無い場合、 CSTEST は米国時間帯の名称と見なされますが、SATSaturday をほのめかすノイズと解釈されます。

Table A-5. PostgreSQL オーストラリア時間帯

時間帯UTC からの隔たり説明
ACST+09:30Central Australia Standard Time(中部オーストラリア標準時間)
CST+10:30Australian Central Standard Time(オーストラリア中部標準時間)
EST+10:00Australian Eastern Standard Time(オーストラリア東部標準時間)
SAT+09:30South Australian Standard Time(南部オーストラリア標準時間)

A.2.2. 日付/時刻入力の解釈

日付/時刻データ型はすべて共通の決まったルーチンで解読されます。

日付/時刻入力の解釈

  1. 入力文字列をトークンに分割し、そしてそれぞれのトークンを文字列、時刻、時間帯、または数値というように分類します。

    1. もし数値トークンにコロン(「:」)があった場合は時刻文字列です。そこに続くすべての数字とコロンを含みます。

    2. もし数値トークンにハイフン(「-」)、スラッシュ(「/」)、2 つ以上の点(「.」)があった場合はテキストの月名がある日付文字列です。

    3. もしトークンが数値だけの場合、それは単項、もしくはISO-8601の連結形式の日付(例:1999 年 1月 13 日 を示す 19990113)、あるいは時刻(例:14:15:16 を示す 141516) のいずれかです。

    4. もしトークンが、プラス記号(「+」)あるいはマイナス記号(「-」)で始まっている場合は時間帯フィールドか特殊なフィールドです。

  2. もしトークンがテキスト文字列の場合、可能性のある文字列と照合されます。

    1. トークンに対して参照テーブルをバイナリ検索し、(today のような)特殊文字列か、(Thursday のような)曜日か、(January のような)月か、あるいは(aton のような)ノイズかを判定します。

      フィールドの値とフィールドのビットマスクを設定します。例えば、 today に年、月、日を設定し、それに追加して now に時、分、秒を設定します。

    2. 探索できなかった場合は類似の時間帯に見合うトークンに対しバイナリ検索を参照テーブルに掛けます。

    3. それでも探し出せなかった場合、エラーを返します。

  3. トークンは数値あるいは数値フィールドです。

    1. トークンが 4 桁以上で、さらに他のどんな日付フィールドも前に読まれていない場合は"連結された日付"(例えば、 19990118)として解釈されます。8 桁と 6 桁の場合は年、月、日と解釈され、7 桁と 5 桁の場合、年と日数と解釈されます。

    2. もしトークンが 3 桁で年がすでに解読されていた場合は日数と解釈されます。

    3. 4 桁または 6 桁の場合で年がすでに読み込まれている時は時刻と解釈されます。

    4. 4 桁以上の場合は年と解釈されます。

    5. ヨーロッパ日付形式で日のフィールドが読まれておらず、その値が 31 以下の場合は日と解釈されます。

    6. 月のフィールドが読まれておらず、値が 12 以下の場合は月と解釈されます。

    7. 日のフィールドが読み込まれておらず、値が 31 以下の場合は日と解釈されます。

    8. 2 桁 もしくは 4 桁以上の場合は年と解釈されます。

    9. それ以外はエラーとなります。

  4. もし BC が指定された場合は内部格納用に年を負の数にして 1 を加えます(グレゴリオ暦にはゼロ年がないので、数値的には 1BC (紀元前1年)がゼロ年になります)。

  5. BC が指定されず年フィールドの長さが 2 桁の場合年は 4 桁になるよう調整されます。そのフィールドが 70 未満の場合は 2000 が加えられますが、そのほかの場合には 1900 が加えられます。

    Tip: (例えば、西暦 99 年を 0099 のように)グレゴリオ暦の西暦元年から 99 年までは、ゼロを前に付加して 4 桁入力することができます。以前のバージョンの PostgreSQL では 3 桁でも 1 桁でも入力が可能でしたが、7.0 時点で、あいまいさを減らすためルールが厳格になり、現在では利用できません。