@c ===========================================================================
@c GNU date syntax documentation
-@c Copyright (C) 1994-2006, 2009-2012 Free Software Foundation, Inc.
+@c Copyright (C) 1994-2006, 2009-2013 Free Software Foundation, Inc.
@c Permission is granted to copy, distribute and/or modify this document
@c under the terms of the GNU Free Documentation License, Version 1.3 or
--- Robert Grudin, @cite{Time and the Art of Living}.
@end quotation
-この章では、@sc{gnu} のプログラムが認識する日付表現文字列について説明
+この章では、GNU のプログラムが認識する日付表現文字列について説明
する。そうした文字列は、ユーザである読者が、様々なプログラムに引数
として渡すことのできるものだ。C のインターフェース (@code{parse_datetime}
関数で使用する) については、ここでは説明しない。
* General date syntax:: 共通規則。
* Calendar date items:: 暦日の項目 (19 Dec 1994)。
* Time of day items:: 時刻の項目 (9:20pm)。
-* Time zone items:: タイムゾーンの項目 (@sc{est}, @sc{pdt}, @sc{gmt})。
+* Time zone items:: タイムゾーンの項目 (EST, PDT, UTC, @dots{})。
* Combined date and time of day items:: 暦日と時刻を組み合わせた項目
(1972-09-24T20:02:00,000000-0500)。
* Day of week items:: 曜日の項目 (Monday, Tuesday)。
* Specifying time zone rules:: タイムゾーン・ルールの指定
(TZ="America/New_York", TZ="UTC0")。
* Authors of parse_datetime:: parse_datetime の作者 (Bellovin, Eggert,
- Salz, Berets, et al)。
+ Salz, Berets, et al.)。
@end menu
@cindex language, in dates
@cindex time zone item
-@command{date} コマンドの出力だからと言って、日付文字列としての条件を
-必ずしも満たしているとはかぎらない。言語の問題のせいばかりではない。
+@command{date} コマンドの出力だからと言って、必ずしも日付文字列として
+プログラムに渡せるとはかぎらない。言語の問題のせいばかりではない。
@samp{IST} のようなタイムゾーン項目には、標準的な意味が存在しないからでも
-ある。@command{date} を使用して日付文字列を生成し、それに対して後で構文解析を
-行うつもりなら、日付の書式には、言語が何であるかに依存せず、@samp{UTC}
-と @samp{Z} 以外のタイムゾーン項目を使用しないものを指定するべきである。
-それを行う方法をいくつか挙げておく。
+ある。@command{date} を使用して日付文字列を生成し、それに対して後で構文解析
+を行うつもりなら、日付の書式には、言語が何であるかに依存せず、@samp{UTC} と
+@samp{Z} 以外のタイムゾーン項目を使用しないものを指定するべきだ。それを行う
+方法をいくつか挙げておく。
@example
$ LC_ALL=C TZ=UTC0 date
くる。以下に挙げる文字列は、すべて暦の上の同じ日付を指定している。
@example
-1972-09-24 # @sc{iso} 8601 形式。
+1972-09-24 # ISO 8601 形式。
72-9-24 # 69 から 99 までは、19xx 年と見なし、
# 00 から 68 までは、20xx 年と見なす。
72-09-24 # 先頭の 0 は無視される。
-9/24/72 # アメリカでよく使われる書き方。
+9/24/72 # アメリカでよく使われる表記。
24 September 1972
24 Sept 72 # September には、4 文字の省略形もある。
24 Sep 72 # 3 文字の省略形は、何月に対しても使用できる。
要するに、ルールはこうだ。
-@cindex @sc{iso} 8601 date format
-@cindex date format, @sc{iso} 8601
-月を数字で表す場合、@sc{iso} 8601 の形式、すなわち @samp{@var{year}-@var{month}-@var{day}} が
+@cindex ISO 8601 date format
+@cindex date format, ISO 8601
+月を数字で表す場合、ISO 8601 の形式、すなわち @samp{@var{year}-@var{month}-@var{day}} が
使用できる。ここで @var{year} は任意の正の数であり、@var{month} は 01 から 12
までの数、@var{day} は 01 から 31 までの数である。数が 10 未満のときは、
0 を前に付けることになる。@var{year} が 68 以下の場合は、@var{year} に2000 が加算
される。また、@var{year} が 69 以上、100 未満ならば、1900 が加算される。
アメリカ合衆国で一般的な @samp{@var{month}/@var{day}/@var{year}} という書式も使うことが
-できる。年を省略した @samp{@var{month}/@var{day}} も有効である。
+できる。年を省略した @samp{@var{month}/@var{day}} も可能である。
@cindex month names in date strings
@cindex abbreviations for months
@samp{June}, @samp{July},
@samp{August}, @samp{September}, @samp{October}, @samp{November},
@samp{December} である。月の
-名前は、最初の 3 文字に省略することができる。省略の印のピリオドは、付け
-ã\81¦ã\82\82ä»\98ã\81\91ã\81ªã\81\8fã\81¦ã\82\82ã\82\88ã\81\84ã\80\82ã\81¾ã\81\9fã\80\81@samp{September} ã\81®ä»£ã\82\8fã\82\8aã\81«ã\80\81@samp{Sept} ã\81¨æ\9b¸ã\81\8fã\81\93ã\81¨ã\82\82
-認められている。
+名前は、最初の 3 文字に省略することができる。その場合、省略の印の
+ã\83\94ã\83ªã\82ªã\83\89ã\81¯ã\80\81ä»\98ã\81\91ã\81¦ã\82\82ä»\98ã\81\91ã\81ªã\81\8fã\81¦ã\82\82ã\82\88ã\81\84ã\80\82ã\81¾ã\81\9fã\80\81@samp{September} ã\81®ä»£ã\82\8fã\82\8aã\81«ã\80\81
+@samp{Sept} と書くことも認められている。
月名を使用する場合、暦の上の日付は、以下のどの形で指定してもよい。
20:02:00.000000
20:02
8:02pm
-20:02-0500 # @sc{est} (U.S. Eastern Standard Time)
+20:02-0500 # EST (U.S. Eastern Standard Time)
@end example
@cindex leap seconds
@cindex minutes, time zone correction by
また、時刻にはタイムゾーン補正を続けてもよい。補正は @samp{@var{s}@var{hh}@var{mm}} という
形で表現され、@var{s} は @samp{+} または @samp{-} 符号、@var{hh} は時間帯の時間差、@var{mm} は分差の
-é\83¨å\88\86ã\81§ã\81\82ã\82\8bã\80\82å\88\86å·®ã\81®é\83¨å\88\86 @var{mm} ã\81¯æ\8c\87å®\9aã\81\97ã\81ªã\81\8fã\81¦もよく、その場合は、1 桁ないし
+é\83¨å\88\86ã\81§ã\81\82ã\82\8bã\80\82å\88\86å·®ã\81®é\83¨å\88\86 @var{mm} ã\81¯æ\8c\87å®\9aã\81\97ã\81ªã\81\84ã\81§もよく、その場合は、1 桁ないし
2 桁の補正は、時間差の指定と見なされる。なお、@var{hh} と @var{mm} の間をコロンで
区切ってもよい。タイムゾーン補正をこの方法で指定した場合、それが、それ
までに指定したいかなるタイムゾーンよりも、また、ローカル・タイムゾーン
-ã\82\88ã\82\8aã\82\82å\84ªå\85\88ã\81\95ã\82\8cã\80\81æ\8c\87å®\9aã\81\97ã\81\9fæ\99\82å\88»ã\81\8cã\80\81å\8d\94å®\9aä¸\96ç\95\8cæ\99\82 (@sc{utc}) よりも補正分進んでいる
-(ã\81\82ã\82\8bã\81\84ã\81¯ã\80\81é\81\85ã\82\8cã\81¦ã\81\84ã\82\8b) ã\82¿ã\82¤ã\83 ã\82¾ã\83¼ã\83³ã\81®æ\99\82å\88»ã\81¨ã\81\97ã\81¦解釈されることになる。
-一例を挙げると、@samp{+0530} と @samp{+05:30} は両方とも、@sc{utc} より 5.5 時間進んだ
+ã\82\88ã\82\8aã\82\82å\84ªå\85\88ã\81\95ã\82\8cã\80\81æ\8c\87å®\9aã\81\97ã\81\9fæ\99\82å\88»ã\81¯ã\80\81å\8d\94å®\9aä¸\96ç\95\8cæ\99\82 (UTC) よりも補正分進んでいる
+(ã\81\82ã\82\8bã\81\84ã\81¯ã\80\81é\81\85ã\82\8cã\81¦ã\81\84ã\82\8b) ã\82¿ã\82¤ã\83 ã\82¾ã\83¼ã\83³ã\81®æ\99\82å\88»ã\81§ã\81\82ã\82\8bã\81¨解釈されることになる。
+一例を挙げると、@samp{+0530} と @samp{+05:30} は両方とも、UTC より 5.5 時間進んだ
タイムゾーンを表している (たとえば、インドである)。これは、タイムゾーン
補正を 1 時間以下の部分まで指定する最善の方法である。タイムゾーン補正の
最大値は、24 時間である。
@section 暦日と時刻を組み合わせた項目
@cindex combined date and time of day item
+@cindex ISO 8601 date and time of day format
+@cindex date and time of day format, ISO 8601
-日付と時刻を組み合わせた項目 (@dfn{combined date and time of day item})
-では、ある年のある特定の一日の時刻を指定する。このタイプの項目が
-必要になるのは、暦日の項目 (@pxref{Calendar date items}) と 時刻の項目
-(@pxref{Time of day items}) をばらばらに指定したのでは、意味が曖昧に
-なってしまう場合である。
+ISO 8601 の拡張日時書式は、ISO 8601 形式の日付、@samp{T} という区切り文字、
+ISO 8601 形式の時刻という構成になっている。@samp{T} の代わりにスペースが
+使われていても、この書式として認識される。
-@example
-# ISO 8601 拡張日時書式
-1972-09-24T20:02:00,000000-0500
-@end example
-
-@cindex @sc{iso} 8601 date and time of day format
-@cindex date and time of day format, @sc{iso} 8601
+この書式では、時刻は 24 時間表記を使用するべきである。秒については、
+コンマまたはピリオドに小数部分を続けることで、小数点以下も指定できる。
+ISO 8601 で認められている分や時の小数表現には対応していない。たいていの
+ホストがナノセコンドの精度のタイムスタンプをサポートしている。サポート
+を超えた精度は、エラーや警告を出さずに単に除去される。
-@sc{iso} 8601 の拡張日時書式は、@sc{iso} 8601 形式の日付、@samp{T} という区切り
-文字、@sc{iso} 8601 形式の時刻という構成になっている。
+例をいくつか挙げてみよう。
+@example
+2012-09-24T20:02:00.052-0500
+2012-12-31T23:59:59,999999999+1100
+1970-01-01 00:00Z
+@end example
@node Day of week items
@section 曜日の項目
@findex last @var{day}
曜日項目の前に数値を付けてもよい。週がその分だけ前に進むことに
なる。これは、@samp{third monday} のような表現で使うのが、一番よい。その
-伝で、@samp{last @var{day}} や @samp{next @var{day}} という表現も許されている。それぞれ、
-単独の @var{day} (曜日) が表すことになる日付より 1 週間前、または 1 週間後の
-日付になる。
+伝で、@samp{last @var{day}} や @samp{next @var{day}} という表現も許されている (@var{day} には
+Sunday, Monday などの曜日を指定する)。それぞれ、単独の @var{day} が表す
+ことになる日付より 1 週間前、または 1 週間後の日付になる。
@sp 1
-(訳注: 上記のことが成り立つのは、@var{day} が今日の曜日のときだけである。
-それ以外の場合は、@var{day} と @samp{next @var{day}} は同じになる。)
+(訳注: next について上記のことが成り立つのは、@var{day} が今日の曜日の
+ã\81¨ã\81\8dã\81 ã\81\91ã\81§ã\81\82ã\82\8bã\80\82ã\81\9dã\82\8c以å¤\96ã\81®å ´å\90\88ã\81¯ã\80\81@var{day} ã\81¨ @samp{next @var{day}} ã\81¯å\90\8cã\81\98ã\81«ã\81ªã\82\8bã\80\82)
曜日項目の後ろにコンマがあっても、無視される。
@sp 1
@sp 1
(訳注: たとえば、@code{date -d "3/27 10:10 2012"} と指定すると、今年の
代わりに 2012 が使われるということらしい。@code{date -d "3/27/2001 10:10 2012"}
-ã\81¯ç\84¡å\8a¹ã\81ªæ\97¥ä»\98ã\81«ã\81ªã\82\8bã\81\97ã\80\81@code{date -d "3/27 1010 2012"} ã\81¯ã\80\811010 å¹´ 3 æ\9c\88 27 æ\97¥
-20:12:00 になる。)
+ã\82\84 @code{date -d "2001-03-27 10:10 2012"} ã\81¯ç\84¡å\8a¹ã\81ªæ\97¥ä»\98ã\81«ã\81ªã\82\8bã\81\97ã\80\81
+@code{date -d "3/27 1010 2012"} は、1010 年 3 月 27 日 20:12:00 になる。)
@node Seconds since the Epoch
@cindex epoch, for POSIX
コンピュータの内部では、時間は、ある紀元 (an epoch) --- きちんと定義
された時間中のある一点 --- からの秒数として表現されている。GNU や POSIX
-のシステムでは、紀元は 1970-01-01 00:00:00 @sc{utc} である。従って、@samp{@@0} は
-その時刻を表し、@samp{@@1} は 1970-01-01 00:00:01 @sc{utc} を表す、以下同様と
+のシステムでは、紀元は 1970-01-01 00:00:00 UTC である。従って、@samp{@@0} は
+その時刻を表し、@samp{@@1} は 1970-01-01 00:00:01 UTC を表す、以下同様と
いうことになる。GNU を始め、POSIX に準拠したほとんどのシステムでは、
POSIX に対する拡張として、こうした時間表記をマイナスの秒数を使うことも
-含めて、サポートしている。従って、@samp{@@-1} は 1969-12-31 23:59:59 @sc{utc} を
+含めて、サポートしている。従って、@samp{@@-1} は 1969-12-31 23:59:59 UTC を
表すことになる。
伝統的な Unix システムでは、秒を 32 ビットの 2 の補数である整数で
-数えており、1901-12-13 20:45:52 から 2038-01-19 03:14:07 @sc{utc} まで
+数えており、1901-12-13 20:45:52 から 2038-01-19 03:14:07 UTC まで
表すことができる。もっと新しいシステムでは、64 ビットの秒数計算を、
ナノセコンドのサブカウント付きで使用しており、宇宙の寿命として
知られている時間のうちのあらゆる時刻を 1 ナノセコンドの精密さで表す
@cindex leap seconds
ほとんどのホストのこうした計算では、閏秒の存在が無視されている。
-たとえば、ほとんどのホストで @samp{@@915148799} は 1998-12-31 23:59:59 @sc{utc} を
-表し、@samp{@@915148800} は 1999-01-01 00:00:00 @sc{utc} を表している。従って、
-間にある 1998-12-31 23:59:60 @sc{utc} という閏秒を表現する方法は存在しない。
+たとえば、ほとんどのホストで @samp{@@915148799} は 1998-12-31 23:59:59 UTC を
+表し、@samp{@@915148800} は 1999-01-01 00:00:00 UTC を表している。従って、
+間にある 1998-12-31 23:59:60 UTC という閏秒を表現する方法は存在しない。
@node Specifying time zone rules
@section タイムゾーン・ルールの指定
@env{TZ} が設定されていなければ、システムのデフォルト設定である。今、
ある一つの日付のみに別のタイムゾーンでデフォルトとして使われる一連の
ルールを適用したいとしよう。その場合は、日付を @samp{TZ="@var{rule}"} という文字列
-で始めればよい。日付中では、対になった引用符 (@samp{"}) を必ず使わなければ
-ならない。また、@var{rule} 中に引用符やバックスラッシュがあるときは、それを
-バックスラッシュでエスケープしなければならない。
+で始めればよい。日付中では、対になった二重引用符 (@samp{"}) で @var{rule} を必ず
+囲わなければならない。また、@var{rule} 中に引用符やバックスラッシュが
+ã\81\82ã\82\8bã\81¨ã\81\8dã\81¯ã\80\81ã\81\9dã\82\8cã\82\92ã\83\90ã\83\83ã\82¯ã\82¹ã\83©ã\83\83ã\82·ã\83¥ã\81§ã\82¨ã\82¹ã\82±ã\83¼ã\83\97ã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82
一例を挙げると、GNU の @command{date} コマンドを使って、「パリで
2004 年 10
ゾーンのルールに従って処理されるので、出力にはニューヨークの時刻が使用
されるのである。(2004 年には、パリは通常ニューヨークより 6 時間進んで
いた。しかし、この例は、時差が 5 時間だったハロウィーンの日のほんの短い
-時間のことを言っている。)
+間のことを言っている。)
@env{TZ} の値はルールであり、ルールには通常、@samp{tz} データベースの地域名が
付けられている (@uref{http://www.twinsun.com/tz/tz-link.htm})。地域名の最新の
Steven M. Bellovin (@email{smb@@research.att.com}) であり、ノースカロライナ大学
チャペルヒル校に在学中のことだった。その後、Usenet 上で数人によって
機能が追加され、1990 年 8 月に Rich $alz (@email{rsalz@@bbn.com}) と Jim Berets
-(@email{jberets@@bbn.com}) によって徹底的なオーバーホールがなされた。@sc{gnu} シス
+(@email{jberets@@bbn.com}) によって徹底的なオーバーホールがなされた。GNU シス
テムのための様々な改訂は、David MacKenzie, Jim Meyering, Paul Eggert
などによって行われた。ほぼ同様の機能を持つ Posix の @code{getdate} 関数との
衝突を避けるために @code{get_date} と名前を変えたのも、この改訂の一部であり、