ユーティリティは、カーネルクロックから読み取った日付と時刻を表示します。 日付と時刻の設定に使用された場合、 カーネルクロックとハードウェアクロックの両方が更新されます。
なお、日付と時刻を設定できるのはスーパユーザだけです。 システムのセキュリティレベル ( securelevel(8) を参照) が 1 より大きい場合、1 秒を越える時刻修正は許されません。
オプション:
(値を修正するのではなく) 値を指定する場合、 秒の範囲は 0-59、 分の範囲は 0-59、時の範囲は 0-23、日の範囲は 1-31、曜日の範囲は 0-6 (Sun-Sat)、月の範囲は 1-12 (Jan-Dec)、 年の範囲は 80-38 もしくは 1980-2038 です。
val が数値の場合、 y m w d H M S のいずれかを使用して、時刻のどの部分を修正するのかを指定する必要があります。
曜日もしくは月は数値の代りに名前で指定可能です。 名前と共にプラス (もしくはマイナス) 記号を使用した場合、 日付は適合する次の (前の) 曜日もしくは月に進みます (戻ります)。 曜日もしくは月が現在のものと変らない場合、日付は修正しません。
特定の値に時刻を修正する場合や、単位が 1 時間よりも大きい場合には、 夏時間は考慮に入れられません。 1 時間以下の単位での修正は、夏時間を考慮します。 現在の時刻を 3 月 26 日 0:30 であり、 夏時間の修正により 01:00 から 02:00 へ進むとすると、 -v +1H により時刻を 3 月 26 日 2:30 へ修正します。 同様に、現在の時刻が 10 月 29 日 0:30 であり、 夏時間の修正により 02:00 から 01:00 へ戻るとすると、 -v +3H により時刻は 10 月 29 日 2:30 になります。
存在しない値を指定して (例えば、ヨーロッパ/ロンドンのタイムゾーンで 2000 年 3 月 26 日 1:30 BST) 時刻を修正する場合、 正当な時刻になるまで、時刻は黙って 1 時間の単位で進められます。 2 回存在する特定の値 (例えば 2000 年 10 月 29 日 1:30) へ時刻を修正する場合、最終的なタイムゾーンは、 2 回の時刻のうち早いものに適合するものとなります。
月は、現在の日付により長さが変わる時間単位ですから、 月単位で日付を調整することは、本質的にあいまいです。 この種の日付調整は、最も直観的な方法により適用されます。 まず最初に、 は月中の日付を保存しようとします。 目標の月が現在の月より短く日付保存が不可能な場合、 目標月の最終日になります。 例えば、5 月 31 日に -v +1m を適用すると、日付は 6 月 30 日になります。 一方、1 月 30 日に 同じオプションを適用すると、日付は 2 月最終日になります。 このアプローチはシェルスクリプトのおいても最も意味がある方法だと 考えられています。 それでも、同じだけの月数を前後に移動する場合、 異なる日付になってしまうかもしれないことには注意してください。
詳細に関しては、下記の例を参照して下さい。
プラス (`+' ) で始まるオペランドは、ユーザ定義の書式文字列で、 日付と時刻の表示方法を指定します。 書式文字列には、 strftime(3) マニュアルページに記載される任意の変換指定と、 任意のテキストを含むことができます。 書式文字列によって指定された文字の出力の後には、つねに改行文字 (`\n' ) が出力されます。 デフォルトの表示形式は、 ``+%+'' です。
もし、引数がプラス記号で始まる文字列でなければ、それはシステムに 日時を設定するための値と解釈されます。 日時を設定するための正式な 表現は以下のとおりです:
分の指定以外はすべて省略可能です。
夏時間と標準時の切り替えや、閏秒や閏年の取り扱いは自動的に行われます。
"date ""+DATE: %Y-%m-%d%nTIME: %H:%M:%S"""
は、下のような表示を行います。
DATE: 1987-11-21 TIME: 13:36:16
ヨーロッパ/ロンドンのタイムゾーンでは、 以下のコマンド:
"date -v1m -v+1y"
は以下を表示します:
"Sun Jan 4 04:15:24 GMT 1998"
(現在 Mon Aug 4 04:15:24 BST 1997 の場合)。
以下のコマンド:
"date -v1d -v3m -v0y -v-1d"
は 2000 年 2 月の最後の日を表示します:
"Tue Feb 29 03:18:00 GMT 2000"
以下のコマンドで、これと同じことができます。
"date -v30d -v3m -v0y -v-1m"
これは、2 月 30 日のような日は存在しないからです。
以下のコマンド:
"date -v1d -v+1m -v-1d -v-fri"
は今月最後の金曜日を表示します:
"Fri Aug 29 04:31:11 BST 1997"
(現在 Mon Aug 4 04:31:11 BST 1997 の場合)。
以下のコマンド:
"date 8506131627"
は、 ``1985 年 6 月 13 日午後 4 時 27 分 '' に日時を設定します。
"date ""+%Y%m%d%H%M.%S"""
をあるマシンで使用し、別のマシンでの時刻設定に使用可能です ( Linux では Qq Li +%m%d%H%M%Y.%S を使うとよいでしょう)。
以下のコマンド:
"date 1432"
は、日付を修正することなく、時刻だけを 午後 2 時 32 分 に設定します。
最後に、コマンド:
"date -j -f ""%a %b %d %T %Z %Y"" ""`date`"" ""+%s"""
は、 の出力の解析を行い、基準時点 (Epoch time) 形式で表現します。
timed(8) が多数のマシンの時計をあわせる場合には、新しい時刻のセットに 数秒かかることがあります。 このとき は、 `Network' time being set と表示します。 と timed(8) との間で通信に失敗した場合は、 `Communication' error with timed が表示されます。