日付/時刻入力文字列は以下の手続きを使って解読します。
入力文字列をトークンに分割し、そしてそれぞれのトークンを文字列、時刻、時間帯、または数値というように分類します。
数値トークンにコロン(:
)が含まれている場合は、時刻文字列です。
そこに続く全ての数字とコロンを含みます。
数値トークンにハイフン(-
)、スラッシュ(/
)、または2つ以上のドット(.
)が含まれている場合は、テキストの月名がある日付文字列です。
日付トークンがすでに現れている場合は代わりに、時間帯名として解釈されます(例えばAmerica/New_York
)。
トークンが数値だけの場合、それは単項、もしくはISO 8601の連結形式の日付(例:1999年1月13日を示す19990113
)、あるいは時刻(例:14:15:16を示す141516
)のいずれかです。
トークンがプラス記号(+
)あるいはマイナス記号(-
)で始まっている場合は、数値形式の時間帯フィールドか特殊なフィールドです。
もしトークンがアルファベット文字列の場合、以下のように可能性のある文字列と照合されます。
トークンが既知の時間帯省略形と一致するかどうかを調べます。 これらの短縮形はB.4で記述する設定ファイルで提供されます。
見つからなかった場合は、そのトークンに対し特殊文字列(たとえばtoday
)、曜日(たとえばThursday
)、月(たとえばJanuary
)、ノイズ(たとえばat
、on
)に一致するかどうか、内部テーブルを検索します。
それでも探し出せなかった場合、エラーを返します。
トークンが数値あるいは数値フィールドの場合を以下に示します。
トークンが8桁または6桁、かつ、以前に他のどのような日付フィールドも読まれていない場合は、「連結された日付」(例えば、19990118
または990118
)として解釈されます。
その解釈方法はYYYYMMDD
またはYYMMDD
です。
もしトークンが3桁で年が既に読み込まれている場合は年内の経過日数と解釈されます。
4桁または6桁の場合で年が既に読み込まれている時は時刻(HHMM
またはHHMMSS
)と解釈されます。
3桁以上の場合、かつ、どの日付フィールドもまだ見つかっていない場合は年と解釈されます (この場合、残る日付フィールドの順序は強制的にyy-mm-ddと解釈されます)。
さもなければ、日付フィールドの順序は、DateStyle
の設定mm-dd-yy、dd-mm-yy、yy-mm-ddに従うものと仮定されます。
月や月内の日のフィールドが範囲外であれば、エラーになります。
もしBCが指定された場合は内部格納用に年を負の数にして1を加えます (グレゴリオ暦にはゼロ年がないので、数値的には1BC(紀元前1年)がゼロ年になります)。
BCが指定されず年フィールドの長さが2桁の場合、年は4桁になるよう調整されます。 そのフィールドが70未満の場合は2000が加えられますが、その他の場合には1900が加えられます。
(例えば、西暦99年を0099
のように)グレゴリオ暦の西暦元年から99年までは、ゼロを前に付加して4桁で入力することができます。