EN JA
DATE(1)
DATE(1) FreeBSD General Commands Manual 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(7) を参照) が 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 回の時刻のうち早いものに適合するものとなります。

時刻を無効の絶対日に調整することはできないので、スイッチ -v 31d -v 12m を使用して、単に年の 5 カ月で失敗します。したがって、1 日を設定する前に月を設定することは、普通です。 -v 12m -v 31d を使用すれば、常に動作します。

月は、現在の日付により長さが変わる時間単位ですから、月単位で日付を調整することは、本質的にあいまいです。この種の日付調整は、最も直観的な方法により適用されます。まず最初に、 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 の実行に影響します。
TZ
日時を表示するときに使用するタイムゾーンです。通常の書式は、 /usr/share/zoneinfo からの相対パス名です。例えば、コマンド“TZ=America/Los_Angeles date”は、カリフォルニアの現在の時刻を表示します。詳しい情報については、 environ(7) を参照してください。

関連ファイル

/var/log/utx.log
日付のリセットおよび時刻変更が記録されます。
/var/log/messages
日付を変更したユーザが記録されます。

終了ステータス

date ユーティリティは、成功すれば 0 で終了し、日時を設定できなかった場合は、1 で、ローカルマシンの設定は、できたが、グローバルマシン全体の設定に失敗した場合は、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 -v3m -v30d -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) 形式で表現します。

診断

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

関連項目

locale(1), gettimeofday(2), getutxent(3), strftime(3), strptime(3), timed(8) R. Gusella and S. Zatti, TSP: The Time Synchronization Protocol for UNIX 4.3BSD.

規格

date ユーティリティは、 IEEE Std 1003.2 (“POSIX.2”) 互換のはずです。 -d, -f, -j, -n, -r, -t-v オプションは、すべて標準の拡張です。

歴史

date コマンドは、 Version 1 AT&T UNIX で登場しました。
June 3, 2010 FreeBSD