DATE(1)

名称
date - 日付と時刻の表示、設定

書式
date [-ju] [-r seconds] [ -v [+|-] val[ymwdHMS]] ... [+output_fmt] date [-jnu] [[[[[cc]yy]mm]dd]HH] MM[.ss] date [-jnu] -f input_fmt new_date [+output_fmt] date [-d dst] [-t minutes_west]

解説
引数なしで実行すると、 date ユーティリティは現在の日付と時刻を表示します。 引数を与えると、 date は、オプションの指定に応じて、日時の設定、 あるいはユーザが定義した書式に従った日付や時刻の表示を行います。

date ユーティリティは、カーネルクロックから読み取った日付と時刻を表示します。 日付と時刻の設定に使用された場合、 カーネルクロックとハードウェアクロックの両方が更新されます。

なお、日付と時刻を設定できるのはスーパユーザだけです。 システムのセキュリティレベル (securelevel(8) を参照) が 1 より大きい場合、1 秒を越える時刻修正は許されません。

オプション:

-d dst
    夏時間用のカーネル値を設定します。 もし dst が 0 でなければ、そのあとの gettimeofday(2) 呼び出しで、 tz_dsttime に 0 以外の値が返ります。

-f  デフォルトの [[[[[ cc] yy] mm] dd] HH ]MM[.ss] 書式の代りに input_fmt を、 new_date をパーズする書式として使用します。 パーズには、 strptime(3) を使用します。

-j  日付の設定を行いません。 本フラグを使用し、 -f フラグを + オプションとともに用いることで、日付の書式の変換ができます。

-n  timed(8) が動作している場合、デフォルトでは date コマンドによりグループ内のすべてのマシンの時刻が変更されます。 しかし、 -n オプションを指定した場合には、他のマシンの時刻は変更せず、 このマシンのみで時刻を設定します。

-r seconds
    seconds が示す日時を表示します。 ここで seconds は、基準時点 (UTC の 1970 年 1 月 1 日 00:00:00; time(3) 参照) からの秒数であり、 10 進数、8 進数、16 進数のいずれの指定も可能です。

-t minutes_west
    カーネルに GMT (グリニッジ標準時) からの時差を設定します。 minutes_west は、 このあとに呼ばれる gettimeofday(2) で、 tz_minuteswest に返される分の数を指定します。

-u  UTC (協定世界時) の日付を表示、設定します。

-v  秒、分、時、日、曜日、月、年のいずれかを val にもとづき修正します (すなわち、現在の日付を取得し、修正した結果を表示します。 日付を設定するのではありません)。 val の前にプラスもしくはマイナスが付いている場合、 時刻はそれに従い前後に修正されます。 そうでない場合は、指定した部分が設定されます。 このフラグを使用した修正は、必要な数だけ指定できます。 フラグは指定した順序に処理されます。

    (値を修正するのではなく) 値を指定する場合、 秒の範囲は 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 回の時刻のうち早いものに適合するものとなります。

    月は、現在の日付により長さが変わる時間単位ですから、 月単位で日付を調整することは、本質的にあいまいです。 この種の日付調整は、最も直観的な方法により適用されます。 まず最初に、 date は月中の日付を保存しようとします。 目標の月が現在の月より短く日付保存が不可能な場合、 目標月の最終日になります。 例えば、5 月 31 日に -v +1m を適用すると、日付は 6 月 30 日になります。 一方、1 月 30 日に 同じオプションを適用すると、日付は 2 月最終日になります。 このアプローチはシェルスクリプトのおいても最も意味がある方法だと 考えられています。 それでも、同じだけの月数を前後に移動する場合、 異なる日付になってしまうかもしれないことには注意してください。

    詳細に関しては、下記の例を参照して下さい。

プラス (‘+’) で始まるオペランドは、ユーザ定義の書式文字列で、 日付と時刻の表示方法を指定します。 書式文字列には、 strftime(3) マニュアルページに記載される任意の変換指定と、 任意のテキストを含むことができます。 書式文字列によって指定された文字の出力の後には、つねに改行文字 (‘\n’) が出力されます。 デフォルトの表示形式は、 “+%+” です。

もし、引数がプラス記号で始まる文字列でなければ、それはシステムに 日時を設定するための値と解釈されます。 日時を設定するための正式な 表現は以下のとおりです:

cc  世紀 (19 または 20 のいずれか) であり、西暦の省略表現の前に付きます。
yy  西暦の省略表現です (1989 年なら 89、06 なら 2006)。
mm  月の数字表現です。 1 から 12 までの数字です。
dd  日です。 1 から 31 までの数字です。
HH  時です。 0 から 23 までの数字です。
MM  分です。 0 から 59 までの数字です。
ss  秒です。 0 から 61 までの数字です (59 秒 + 2 秒までのうるう秒)。

分の指定以外はすべて省略可能です。

夏時間と標準時の切り替えや、閏秒や閏年の取り扱いは自動的に行われます。

使用例
以下のコマンド:

    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 では "+%m%d%H%M%Y.%S" を使うとよいでしょう)。

以下のコマンド:

    date 1432

は、日付を修正することなく、時刻だけを 午後 2 時 32 分 に設定します。

最後に、コマンド:

    date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"

は、 date の出力の解析を行い、基準時点 (Epoch time) 形式で表現します。

環境変数
date の実行は以下の環境変数の影響を受けます。

TZ  日時を表示する際に用いられるタイムゾーンを設定します。 通常の書式は /usr/share/zoneinfo からの相対パス名です。 例えば、コマンド “TZ=America/Los_Angeles date” はカリフォルニアの現在の時刻を表示します。 詳しいことは、 environ(7) を参照してください。

関連ファイル
/var/log/wtmp
    日付のリセットおよび時刻変更の記録がこのファイルに残されます。
/var/log/messages
    日付を変更したユーザの記録がこのファイルに残されます。

関連項目
gettimeofday(2), strftime(3), strptime(3), utmp(5), timed(8) TSP: The Time Synchronization Protocol for UNIX 4.3BSD, R. Gusella, S. Zatti.

診断
date ユーティリティは、 成功した場合は 0 を、日時を設定できなかった場合は 1 を、 ローカルマシンの設定はできたが、グローバルマシン全体の設定に失敗した 場合は 2 を返します。

timed(8) が多数のマシンの時計をあわせる場合には、新しい時刻のセットに 数秒かかることがあります。 このとき date は、 ‘Network time being set’ と表示します。 date と timed(8) との間で通信に失敗した場合は、 ‘Communication error with timed’ が表示されます。

規格
date ユーティリティは p1003.2 互換であると想定しています。

歴史
date コマンドは AT&T UNIX から導入されました。