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

27. 日付入力の書式

最初の引用:

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

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

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

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

ここでの日付の構文は,0年から表現することは可能ですが,コンピュータの整 数は,そのような長い範囲を表現することができないことがよくあります. POSIXシステム上では,時刻は1970-01-01 00:00:00 UTCから始 まります.POSIXは,POSIXエポック時間より前と,遠い将 来の時間のサポートを要求しません.伝統的なUnixシステムは,32ビットの符号 付きtime_tがあり,1901-12-13 20:45:52から2038-01-19 03:14:07 UTCまで表現可能です.64ビットの符号付きtime_tを用いたシステ ムでは,知られている宇宙の一生の全ての時間を表現可能です.

27.1 一般的な日付の構文  Common rules.
27.2 カレンダーの日付の項目  19 Dec 1994.
27.3 日付の時間の項目  9:20pm.
27.4 タイムゾーンの項目  EST, PDT, GMT, ...
27.5 曜日の項目  Monday and others.
27.6 日付文字の相対的な項目  next tuesday, 2 years ago.
27.7 日付文字列の純粋な数字  19931219, 1440.
27.8 getdateの著者  Bellovin, Eggert, Salz, Berets, et al.


27.1 一般的な日付の構文

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

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

いくつかの数字は,ほとんどの文脈で単語で書き出すことができます.これは曜 日の項目や相対的な項目を指定するとき,最も役に立ちます(以下を参照してく ださい).以下にリストがあります.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'は, 正確にを意味します.

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

現在の実装では,`AM',`DST',`EST',`first', `January',`Sunday',`tomorrow',そして`year'のよう な,単語と省略は英語のみサポートされています.

dateの出力は,言語の問題だけでなく,`IST'のようなタイムゾー ン項目に対する標準的な意味がないため,日付文字列として常に受け入れ可能で はありません.後でパースする目的で日付文字列を生成するために dateを使用するとき,言語に独立して,`UTC'と`Z'以外の タイムゾーン項目を使用しない日付の書式を指定してください.こうするための 方法が,以下にいくつかあります.

 
$ LC_ALL=C TZ=UTC0 date
Fri Dec 15 19:48:05 UTC 2000
$ TZ=UTC0 date +"%Y-%m-%d %H:%M:%SZ"
2000-12-15 19:48:05Z
$ date --iso-8601=seconds  # GNUの拡張
2000-12-15T11:48:05-0800
$ date --rfc-822  # GNUの拡張
Fri, 15 Dec 2000 11:48:05 -0800
$ date +"%Y-%m-%d %H:%M:%S %z"  # %zはGNUの拡張です.
2000-12-15 11:48:05 -0800

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


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

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

 
1972-09-24     # ISO 8601.
72-9-24        # 69から99までは19xxだと仮定され,
               # 00から68までは20xxだと仮定されます.
72-09-24       # 前置されるゼロは無視されます.
9/24/72        # 一般的な U.S. での書き方です.
24 September 1972
24 Sept 72     # 九月には特殊な省略があります.
24 Sep 72      # 三文字の省略は常に可能です.
Sep 24, 1972
24-sep-72
24sep72

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

 
9/24
sep 24

以下の規則があります.

数字の月に対し,ISO 8601書式`year-month-day' が可能で,yearは正の数,monthは01と12の間の数,そして dayは01と31の間の数です.数字が10未満の場合,ゼロを前置する必要が あります.yearが68以下の場合,2000が加えられます.それ以外の場合で, 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


27.3 日付の時間の項目

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

 
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'です.(これは,`12am'を正午,`12pm'を真夜中として使 用する,ラテン語に由来する古い伝統の反対となる,`12am'と`12pm' のゼロを起点にした解釈です.)

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

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


27.4 タイムゾーンの項目

タイムゾーンの項目(time zone item)は,国際的なタイムゾーンを指定し, 例えば世界標準時に対する`UTC'や`Z'のような小さな文字集合で示さ れます.含まれるピリオドは全て無視されます.別々の(すなわち,いくつかの 空白で区切られている)単語内の文字列`DST'が夏時間でないタイムゾーン に続くことで,対応する夏時間のタイムゾーンが指定可能です.

`UTC'と`Z'以外のタイムゾーンの項目は時代遅れで,曖昧なので推奨 されません.例えば,`EST'はオーストラリアと合州国では異なる意味を持 ちます.代わりに,前のセクションで記述されている,`-0500'のような曖 昧でない数字のタイムゾーンコレクションを使用した方が良いでしょう.


27.5 曜日の項目

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

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

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

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


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

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

 
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'が続く相対的な項目は,値の乗 数が前置された単位と等価です.

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

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

相対的な項目が,調整された時刻を跨るために結果として日付が生成されるとき, 特に夏時間では,結果として生じる日付と時間は,それに応じて調整されます.


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

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

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

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

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


27.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 February, 25 2004 using texi2html