[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
最初の引用:
我々の時間を計る単位は,秒から月まであり,かなり複雑で,非対称で,連結で きないので,徹頭徹尾,頭の計算で間に合わせることは,ほとんど不可能です. 本当に,非道な神が我々を時間の奴隷にし,ぼんやりした繰り返し仕事と不快な 驚きへの従属から,我々が逃げることをほとんど不可能にしようと企てたので, 彼は我々の現在のシステムを伝える以上のことを行うことができませんでした. それは,台形の建築用ブロックの集合に似ていて,垂直や水平の表面が無く,最 も単純な考えで,建造物を飾り立てることを要求された言語に似ていて,役に立 たない微粒子と長い遠回しな表現です.我々がはっきりとした,または,少なく とも頭打ちな経験に直面することを可能にした,より成功した言語と科学ののパ ターンと異なり,我々の時間を計るシステムは,静かにそして繰り返し,時間の 恐怖を呼び起こします.... それは,建築家がフィートで長さを,メートルで幅を,そしてellで高 さを計る必要があるかのようなものです.基本的な指示用のマニュアルで,五つ の異なる言語の知識を必要とするかのようなものです.我々が,どうにもならな い混乱した気分で,この間の火曜日や日曜日からの一週間といった,短い過去あ るいは近い将来を調査することがよくあるのは,不思議ではありません. ... (1)
--- 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
を用いたシステムでは, 知られている宇宙の一生の全ての時間を表現可能です.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
日付は,空白で分けられた多くの項目を含む,空も可能な文字列です.曖 昧にならないとき,空白は省略できます.空の文字列は今日の始まり(すなわち 真夜中)を意味します.項目の順序は重要ではありません.日付の文字列は,項 目の多くの特色を含むことができます.
我々は,これらの項目形式のそれぞれを,以下で順番に記述します.
いくつかの数字は,ほとんどの文脈で単語で書き出すことができます.これは曜 日の項目や相対的な項目を指定するとき,最も役に立ちます(以下を参照してく ださい).ここにリストがあります.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を意味します.
月をこの方法で書くとき,"完全な綴り"の代わりに,それは数字で書かれてい ると考えられます.これは文字に変更することもできます.
現在の実装では,`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 # a GNU extension 2000-12-15T11:48:05-0800 $ date --rfc-822 # a GNU extension Fri, 15 Dec 2000 11:48:05 -0800 $ date +"%Y-%m-%d %H:%M:%S %z" # %z is a GNU extension. 2000-12-15 11:48:05 -0800 |
英文字の大文字小文字は,日付では完全に無視されます.コメントは,適切に入 れ子状になった丸カッコに含まれる限り,丸カッコの間で導入可能です.数字に 続かないハイフンは,現在無視されます.数字の前に前置されるゼロは無視され ます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
カレンダーの日付の項目は年の日付を指定します.それは,月が数字で指 定されるか,文字で指定されるかによって異なりますこれら全ての文字列は,同 じカレンダーの日付を指定します.
1972-09-24 # ISO 8601. 72-9-24 # 69から99では19xx # 68から00では20xxと仮定します. 72-09-24 # 前置されるゼロは無視されます. 9/24/72 # U.S.の一般的な表記です. 24 September 1972 24 Sept 72 # Septemberの省略指定です. 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 |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
日付文字列での日付の時間の項目は,与えられた日付の時間を指定します. ここにいくつか例があり,全て同じ時間を表現しています.
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'です.(これは,`12m'を正午,`12pm'を真夜中として使 用する,ラテン語に由来する古い伝統の反対となる,`12am'と`12pm' のゼロを起点にした解釈です.)
時刻は,代わりにタイムゾーン修正を続けることができ,それは `shhmm'として表現され,sは`+'または `-',hhは時間の数字,そしてmmは地域の分の数字になります. タイムゾーン修正がこのように与えられるとき,それは,世界標準時(UTC) に関連する時間として解釈され,タイムゾーンや地域的タイムゾーンに対する, あらゆる前置される指定に優先します.日付の時間のminuteの部分は,タ イムゾーン修正が使用されるとき省略できません.これは,時間の分数部分でタ イムゾーン修正を指定する唯一の方法です.
`am'/`pm'やタイムゾーン修正は,どちらか一方のみ指定でき,両方 はできません.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
タイムゾーンの項目は,国際的なタイムゾーンを指定し,例えば世界標準 時に対する`UTC'や`Z'のような小さな文字集合で示されます.含まれ るピリオドは全て無視されます.別々の(すなわち,いくつかの空白で区切られ ている)単語内の文字列`DST'が夏時間でないタイムゾーンに続くことで, 対応する夏時間のタイムゾーンが指定可能です.
`UTC'と`Z'以外のタイムゾーンの項目は時代遅れで,曖昧なので推奨 されません.例えば,`EST'はオーストラリアと合州国では異なる意味を持 ちます.代わりに,前のセクションで記述されている,`-0500'のような曖 昧でない数字のタイムゾーンコレクションを使用した方が良いでしょう.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
曜日の明示的な記述は,将来,曜日に到達するよう,(必要なら)日付に前置され ます.
曜日は,完全に綴ることができます.`Sunday',`Monday', `Tuesday',`Wednesday',`Thursday',`Friday',または, `Saturday'です.曜日は,最初の三文字で省略でき,追加のピリオドを続 けることができます.特別な省略として,`Tuesday'に対する`Tues', `Wednesday'に対する`Wednes',そして,`Thursday'に対する `Thur'や`Thurs'も許可されます.
前置された追加分の週を移動するため,数字を曜日項目に前置することができま す.それは,`third monday'のような表現が最も良い使用法です.この文 脈では,`last day'や`next day'も受け入れられます. それらはdayで表現されている日付の1週間前,または後になります.
曜日に続くカンマは無視されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
`相対的な項目'は,日付(それが無い場合は現在の日付)を前後に調整しま す.相対的な項目の効果は蓄積されます.ここにいくつか例があります.
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'のような日 付文字列で好まれます.
相対的な項目が,調整された時刻を跨るために結果として日付が生成されるとき, 特に夏時間では,結果として生じる日付と時間は,それに応じて調整されます.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
純粋な10進数の正確な解釈は,日付文字列の文脈に依存します.
10進数が,形式yyyymmddで,他のカレンダーの日付項目 (see 節 4.2 カレンダーの日付の項目)が,その日付項目の前に現われない場合, yyyyは年,mmは月の数字,そしてddは月の日付として,指定 されたカレンダーの日付として読み込まれます.
10進数が形式hhmmで,他の日付の時間の項目がその日付文字列の前 に現われない場合,hhは日付の時間,そしてmmは時間の分として, 指定された日付の時間として読み込まれます.mmは省略もできます.
カレンダーの日付と日付の時間が,両方とも日付文字列の数字の左に現われ,そ して相対的な項目が無い場合,数字は年に優先します.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |
getdate
の著者getdate
の著者"へのコメント(無し)
getdate
は元々,Chapel HillのNorth Carolina大学にいるときに, Steven M. Bellovin ()によって実装されました. コードはその後Usenetの2人に捻りを加えられ,Rich $alz ()とJim Berets ()が,1990 年8月に完全に点検しました.GNUシステムに対する様々な修正は,David MacKenzie,Jim Meyering他によってなされました.
この章は元々,François Pinard ()が `getdate.y'ソースコードから生成し,K. Berry ()が編集しました.
[ << ] | [ >> ] | [表紙] | [目次] | [索引] | [検索] [上端 / 下端] [?] |