[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

3. 日付入力の書式

最初の引用:

我々の時間を計る単位は,秒から月まであり,かなり複雑で,非対称で,連結で きないので,徹頭徹尾,頭の計算で間に合わせることは,ほとんど不可能です. 本当に,非道な神が我々を時間の奴隷にし,ぼんやりした繰り返し仕事と不快な 驚きへの従属から,我々が逃げることをほとんど不可能にしようと企てたので, 彼は我々の現在のシステムを伝える以上のことを行うことができませんでした. それは,台形の建築用ブロックの集合に似ていて,垂直や水平の表面が無く,最 も単純な考えで,建造物を飾り立てることを要求された言語に似ていて,役に立 たない微粒子と長い遠回しな表現です.我々がはっきりとした,または,少なく とも頭打ちな経験に直面することを可能にした,より成功した言語と科学ののパ ターンと異なり,我々の時間を計るシステムは,静かにそして繰り返し,時間の 恐怖を呼び起こします.

… それは,建築家がフィートで長さを,メートルで幅を,そしてellで高 さを計る必要があるかのようなものです.基本的な指示用のマニュアルで,五つ の異なる言語の知識を必要とするかのようなものです.我々が,どうにもならな い混乱した気分で,この間の火曜日や日曜日からの一週間といった,短い過去あ るいは近い将来を調査することがよくあるのは,不思議ではありません. … (1)

-- Robert Grudin, Time and the Art of Living.

このセクションでは,GNUプログラムが受け入れる,文章上での日付の表現を記 述します.これらは,ユーザが様々なプログラムの引数として供給可能な文字列 です.(getdate関数による)Cのインターフェースはここでは述べません.

ここでの日付の構文は,西暦0年から表現することは可能ですが,コンピュータ の整数は,そのような(比較的)長い時間に対し余りに大きすぎます.Unixシステ ム上で意味があるものとして利用可能な最も早い日付は,UTCの1970年の1月1日 の真夜中です.


3.1 一般的な日付の構文

日付は,空白で分けられた多くの項目を含む,空も可能な文字列です.曖 昧にならないとき,空白は省略できます.空の文字列は今日の始まり(すなわち 真夜中)を意味します.項目の順序は重要ではありません.日付の文字列は,項 目の多くの特色を含むことができます.

我々は,これらの項目形式のそれぞれを,以下で順番に記述します.

いくつかの数字を,ほとんどの文脈で単語で書き出すことができます.これは曜 日の項目や相対的な項目を指定するとき,最も役に立ちます(以下を参照してく ださい).ここにリストがあります.1に対する`first',2に対する `next',3に対する`third',4に対する`fourth',5に対する `fifth',6に対する`sixth',7に対する`seventh',8に対する `eighth',9に対する`ninth',10に対する`tenth',11に対する `eleventh',そして12に対する`twelfth'です.また`last'は, 正確に-1を意味します.

月をこの方法で書くとき,"完全な綴り"の代わりに,それは数字で書かれてい ると考えられます.これは文字に変更することもできます.

英文字の大文字小文字は,日付では完全に無視されます.コメントは,適切に入 れ子状になった丸カッコに含まれる限り,丸カッコの間で導入可能です.数字に 続かないハイフンは,現在無視されます.数字の前に前置されるゼロは無視され ます.


3.2 カレンダーの日付の項目

カレンダーの日付の項目は年の日付を指定します.それは,月が数字で指 定されるか文字で指定されるかによって異なりますこれら全ての文字列は,同じ カレンダーの日付を指定します.

 
1970-09-17           # ISO 8601.
70-9-17              # これは,世紀をデフォルトで想定します.
70-09-17             # 前置されるゼロは無視されます.
9/17/72              # U.S.の一般的な表記です.
24 September 1972
24 Sept 72           # Septemberの省略指定です.
24 Sep 72            # 三文字の省略は常に利用可能です.
Sep 24, 1972
24-sep-72
24sep72

年も削除できます.この場合,最後に指定された年,または,無ければ現在の年 が利用されます.例えば,以下のようになります.

 
9/17
sep 17

ここに規則があります.

数字の月に対し,ISO 8601書式`year-month-day'が可 能で,yearは正の数,monthは01と12の間の数,そしてdayは 01と31の間の数です.数字が10未満の場合,前置されるゼロが存在する必要があ ります.yearが100未満の場合,この世紀を強制するために1900が加えら れます.対称的に,合州国でよく使用される `month/day/year'も受け入れられます.同様に,年を 削除すると`month/day'です.

文字の月は完全に綴ることもできます.`January',`February', `March',`April',`May',`June',`July', `August',`September',`October',`November',または, `December'です.文字の月は最初の三文字で省略でき,省略のドットの後 置も可能です.`September'の代わりに`Sept'と書くことも許可され ています.

月が文字で書かれるとき,カレンダーの日付は以下のようにして与えられます.

 
day month year
day month
month day year
day-month-year

または,年を省略します.

 
month day

3.3 日付の時間の項目

日付文字列での日付の時間の項目は,与えられた日付の時間を指定します. ここにいくつか例があり,全て同じ時間を表現しています.

 
20:02:0
20:02
8:02pm
20:02-0500      # EST(合州国東部標準時)

より一般的に,日付の時間は,`hour:minute:second' として与えることができ,hourは0と23の間の数字,minuteは0と59 の間の数字,そしてsecondは0と59の間の数字です.代わりに, `:second'は省略でき,その場合,それは0です.

時間に`am'や`pm'(または,`a.m.'や`p.m.')が続く場合, hourは1から12までの実行に限定され,`:minute'は省略でき ます(ゼロとされます).`am'は午前を示し,`pm'は午後を示します. この注釈で,12は1の前になります.真夜中は`12am'で,一方正午は `12pm'です.

時刻は,代わりにタイムゾーン修正を続けることができ,それは `shhmm'として表現され,sは`+'または `-',hhは時間の数字,そしてmmは地域の分の数字になります. タイムゾーン修正がこのように与えられるとき,それは,世界標準時(UTC)に関 連する時間として解釈され,タイムゾーンや地域的タイムゾーンに対する,あら ゆる前置される指定に優先します.日付の時間のminuteの部分は,タイム ゾーン修正が使用されるとき省略できません.これは,時間の分数部分でタイム ゾーン修正を指定する唯一の方法です.

`am'/`pm'やタイムゾーン修正は,どちらか一方のみ指定でき,両方 はできません.


3.4 タイムゾーンの項目

タイムゾーンの項目は,国際的なタイムゾーンを指定し,小さな文字集合 で示されます.それらは下位互換性の理由でサポートされますが,それらは実際 は曖昧なので推奨されません.例えば,省略の`EST'はオーストラリアと合 州国では異なる意味を持ちます.含まれるピリオドは全て無視されます.軍のタ イムゾーン指定は単一文字を使用します.現在,完全な地域の時間のみ,タイム ゾーン項目で表現できます.タイムゾーン修正のより優れた制御に付いては,前 のセクションを参照してください.

ここに,多くのサマータイムを使用しないタイムゾーンがあり,地域の時間の値 で印付けされています.

-1200

軍では`Y'です.

-1100

軍では`X'です.

-1000

軍では`W'です.

-0900

軍では`V'です.

-0800

`PST'はPacific Standardで,軍では`U'です.

-0700

`MST'はMountain Standardで,軍では`T'です.

-0600

`CST'はCentral Standardで,軍では`S'です.

-0500

`EST'はEastern Standardで,軍では`R'です.

-0400

`AST'はAtlantic Standardで,軍では`Q'です.

-0300

軍では`P'です.

-0200

軍では`O'です.

-0100

軍では`N'です.

+0000

`GMT'はGreenwich Mean,`UT'はUniversal,`UTC'は Coordinated Universal,`WET'はWestern European,そして,ISO 8601と 軍では`Z'です.

+0100

軍では`A'で,`CET'はCentral European,`MET'はMidden Europesche Tijd (Dutch),そして`MEZ'はMittel-Europäische Zeit (German)です.

+0200

軍では`B'で,`EET'はEastern Europeanです.

+0300

軍では`C'です.

+0400

軍では`D'です.

+0500

軍では`E'です.

+0600

軍では`F'です.

+0700

軍では`G'です.

+0800

軍では`H'です.

+0900

軍では`IC'で,`JST'は日本標準時です.

+1000

軍では`K'で,`GST'はGuam Standardです.

+1100

軍では`L'です.

+1200

軍では`M'で`NZST'はNew Zealand Standardです.

ここに,多くのサマータイム(DST)のタイムゾーンがあり,地域の時間の値で印 付けされています.また,以下のDSTではないタイムゾーンで,分けられた単語 (すなわち,空白で分けられているもの)の文字列`DST'が続くものは,対応 するDSTタイムゾーンが指定できます.

-0700

`PDT'はPacific Daylightです.

-0600

`MDT'はMountain Daylightです.

-0500

`CDT'はCentral Daylightです.

-0400

`EDT'はEastern Daylightです.

-0300

`ADT'はAtlantic Daylightです.

+0100

`BST'はBritish Summerで,`WEST'はWestern European Summerです.

+0200

`CEST'はCentral European Summer,`MEST'はMidden Europesche S. Tijd (Dutch),そして`MESZ'はMittel-Europäische Sommerzeit (German)です.

+1300

`NZDT'はNew Zealand Daylightです.


3.5 曜日の項目

曜日の明示的な記述は,将来,曜日に到達するよう,(必要なら)日付に前置され ます.

曜日は,完全に綴ることができます.`Sunday',`Monday', `Tuesday',`Wednesday',`Thursday',`Friday',または, `Saturday'.曜日は,最初の三文字で省略でき,追加のピリオドを続ける ことができます.特別な省略として,`Tuesday'に対する`Tues', `Wednesday'に対する`Wednes',そして,`Thursday'に対する `Thur'や`Thurs'も許可されます.

前置された追加分の週を移動するため,数字を曜日項目に前置することができま す.それは,`third monday'のような表現が最も良い使用法です.この文 脈では,`last day'や`next day'も受け入れられます. それらはdayで表現されている日付の1週間前,または後になります.

曜日に続くカンマは無視されます.


3.6 日付文字の相対的な項目

`相対的な項目'は,日付(それが無い場合は現在の日付)を前後に調整しま す.相対的な項目の効果は蓄積されます.ここにいくつか例があります.

 
1 year
1 year ago
3 years
2 days

時間の置換の単位は,年や月全体を移動するため,文字列`year'や `month'が選択できます.年や月は全てが同じ期間ではないので,これらは 曖昧な単位です.より正確な単位は,14日と等価な`fortnight',7日と等 価な`week',24時間と等価な`day',60分と等価な`hour',60秒 と等価な`minute'や`min',そして1秒と等価な`second'や `sec'です.これらの単位の`s'接尾子は受け入れられ,無視されます.

時間の単位は乗数を前置でき,それは追加の符号付きの数字で与えられます.符 号無しの数字は,正の符号として扱われます.全く数字が無いものは,乗数とし て1が暗示されます.文字列`ago'が続く相対的な項目は,値-1の乗 数が前置された単位と等価です.

文字列`tomorrow'は,未来の1日と等価で(`day'と等価),文字列 `yesterday'は,過去の1日と等価です(`day ago'と等価).

文字列`now'や`today'は,ゼロ値の時間を置換する相対的な項目で, これらの文字列は,,ゼロ値の時間を置換することは,前の項目で変化されてい ないときの現在時間を表現するという事実に由来します.それらは`12:00 today'のように,他の項目を強調するために使用できます.文字列`this' もゼロ値の時間を置換する意味を持ちますが,`this thursday'のような日 付文字列で好まれます.

相対的な項目が,DSTと非DST(またはその逆)の境界を跨る日付を結果として生じ るとき,時間は現地時間にしたがって調整されます.


3.7 日付文字列の純粋な数字

純粋な10進数の正確な解釈は,日付文字列の文脈に依存します.

10進数が,形式yyyymmddで,他のカレンダーの日付項目 (see section カレンダーの日付の項目)が,その日付項目の前に現われない場合, yyyyは年,mmは月の数字,そしてddは月の日付として,指定 されたカレンダーの日付として読み込まれます.

10進数が形式hhmmで,他の日付の時間の項目がその日付文字列の前 に現われない場合,hhは日付の時間,そしてmmは時間の分として, 指定された日付の時間として読み込まれます.mmは省略もできます.

カレンダーの日付と日付の時間が,両方とも日付文字列の数字の左に現われ,そ して相対的な項目が無い場合,数字は年に優先します.


3.8 getdateの著者

getdateは元々,Chapel HillのNorth Carolina大学にいるときにSteven M. Bellovin (smb@research.att.com)によって実装されました.コー ドはその後Usenetの2人に捻りを加えられ,Rich $alz (rsalz@bbn.com)とJim Berets (jberets@bbn.com)が,1990 年8月に完全に点検しました.GNUシステムに対する様々な修正は,David MacKenzie,Jim Meyering他によってなされました.

この章は元々,François Pinard (pinard@iro.umontreal.ca)が `getdate.y'ソースコードから生成し,K. Berry (kb@cs.umb.edu)が編集しました.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.