DATE(1)

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

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

解説
引数なしで実行すると、 date ユーティリティは現在の日付と時刻を表示します。 引数を与えると、日時の設定、 あるいはユーザが定義したフォーマットに従った日付や時刻の表示を行います。

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

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

オプション:

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

-f  デフォルトの [[[[yy]mm]dd]HH]MM[.ss] フォーマットの代りに fmt を、時刻をパーズするフォーマットとして使用します。 strptime(3) を使用してパーズします。

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

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

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

-t minutes_west
    カーネルに GMT (グリニッジ標準時) からの時差を設定します。このあとに呼ばれる 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 回の時刻のうち早いものに適合するものとなります。

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

プラス (‘+’) で始まるオプションは、日付と時刻の表示方法を指定する フォーマット文字列です。フォーマット文字列には、 strftime(3) で記述されているような変換文字列と、任意のテキストを含むことができます。 フォーマット文字列によって指定された文字の後には、つねに改行文字 (‘\n’) が出力されます。 date のデフォルトの表示形式は、

    ``+%+''

としたものと同じです。

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

cc  世紀 (19 または 20 のいずれか) であり、西暦の省略表現の前に付きます。
yy  西暦の省略表現です。西暦の 10 の位と 1 の位です (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 -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"

をあるマシンで使用し、別のマシンでの時刻設定に使用可能です。

以下のコマンド:

    date 1432

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

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

バグ
システムは VMS と高い互換性を持つフォーマットで日時を保持しようとしています。しかし、 VMS は GMT ではなくローカルな時刻を使っており、夏時間を理解しません。そのため、 UNIX と VMS を同時に使う場合は、 VMS を GMT で使うべきでしょう。

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

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