Linux の date コマンド は、現在の日時を表示したり、指定した書式でフォーマットして出力するためのコマンドです。
オプションを使うことで、表示フォーマットの変更だけでなく、未来の日時・過去の日時を計算して表示することもできます。
date コマンドが参照するのはサーバのシステム時刻です。
NTP クライアント(ntpd や chronyd など)が適切に動作していないと、標準時からずれてしまうことがあります。
ログのタイムスタンプやバッチ処理の実行時刻に影響するため、運用中のサーバでは時刻同期の状態もあわせて確認しておくことが重要です。
date [オプション]... [+フォーマット]date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
引数や +フォーマット を省略した場合は、現在の日時をデフォルトの形式で表示します。
+%Y-%m-%d %H:%M:%S のように書式を指定すると、スクリプトで扱いやすい形に整形して表示できます。
・現在のシステム日時を表示する(デフォルト形式)。
date
もっとも基本的な使い方です。
現在のシステム日時を、ロケールや環境に応じたデフォルトの形式で表示します。
・「YYYY-MM-DD HH:MM:SS」形式で表示する。
date "+%Y-%m-%d %H:%M:%S"
年・月・日・時刻を固定のフォーマットで表示します。
ログやバックアップファイル名に使うときなど、機械的に扱いやすい形式にしたいときによく使います。
・UTC(協定世界時)で日時を表示する。
date -u "+%Y-%m-%d %H:%M:%S UTC"
-u / –utc / –universal オプションを付けると、ローカルタイムではなくUTCで日時を表示します。
グローバルなサービスやログ解析で、タイムゾーンを統一して扱いたい場合に便利です。
・システム日時から 1 か月前の日時を表示する。
date -d "1 months ago"
-d オプションで文字列を指定すると、その日時をもとに計算した結果を表示できます。
"1 months ago" のように指定すると、現在の日時から 1 か月前の日時が表示されます。
・システム日時から 1 日後の日時を表示する。
date -d "1 days"
こちらは現在日時から1 日後の日時を表示する例です。
"2 days" や "3 hours" など、日数や時間数を変えて使うこともできます。
・指定した日時の Unix 時刻(エポック秒)を表示する。
date -d "2024-01-01 00:00:00" +%s
+%s は「1970-01-01 00:00:00 UTC からの経過秒数(Unix 時刻)」を表します。
アプリケーションログなどで Unix 時刻を扱う場合の変換に便利です。
・現在の Unix 時刻(エポック秒)を表示する。
date +%s
現在時刻を Unix 時刻として表示する例です。
外部システムとの時刻同期の確認や、一意な ID の一部として扱うといった用途もあります。
・cp コマンドでバックアップを取るときに日付を付ける。
cp -p hoge{,.date +%Y%m%d}
hoge を hogeYYYYMMDD というファイル名でコピーするワンライナーです。
-p オプションで属性を引き継ぎつつ、日付付きのバックアップファイルを作成できます。
・crontab 内で日付付きログファイル名を使う。
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup_date +\%Y\%m\%d.log 2>&1
cron から実行されるスクリプト内や crontab 上で、日付付きのログファイル名を使う例です。
crontab では % に特別な意味があるため、\% のようにエスケープが必要になる点に注意してください。
・バックアップファイルやログファイルに日付を付ける
設定ファイルや DB ダンプのバックアップを、YYYYMMDD 形式の日付付きで保存しておくと、
どの時点のバックアップかが一目で分かり、ロールバック時の判断がしやすくなります。
・cron ジョブの動作確認
cron から実行されているスクリプトの先頭で date を呼び、
実際に何時にジョブが動いているかをログに残しておくと、トラブルシュート時に役立ちます。
・ログのタイムスタンプとシステム時刻の整合性チェック
アプリケーションログの時刻と date の出力が大きくずれている場合、
NTP 設定の問題やタイムゾーン設定の誤りが疑われます。
障害調査の第一歩として、date コマンドによるシステム時刻の確認は欠かせません。
・過去/未来の日時を使ったテスト
「1 日後に期限切れになる処理」や「1 か月後の日時で動作が変わる処理」など、
date の -d オプションを使って、テスト用の日時を簡単に用意できます。
| short option | long option | description |
|---|---|---|
| -d | --date=STRING | -dオプションの引数、またはSTRINGに日時指定文字列で指定した日時を表示する |
| -f | --file=DATEFILE | 指定したファイルから1行ずつ読み込み、-dオプションと同じ形式で指定された日時を表示する |
| -I[TIMESPEC] | --iso-8601[=TIMESPEC] | ISO8601で指定されている書式で表示する |
| -r | --reference=FILE | FILE の最終変更時刻を表示する |
| -R | --rfc-2822 | RFC 2822 形式で日付と時刻を出力する 例: Mon, 07 Aug 2006 12:34:56 -0600 |
| --rfc-3339=TIMESPEC | RFC 3339 形式で日付と時刻を出力する | |
| -s | --set=STRING | 日付と時刻をdateに設定する |
| -u | --utc、--universal | 協定世界時を使用する |
| --help | この使い方を表示して終了する | |
| --version | バージョン情報を表示して終了する |
| %Y | 年 |
| %m | 月 (01..12) |
| %D | 日付。 %m/%d/%y と同様 |
| %H | 時 (00..23) |
| %I | 時 (01..12) |
| %M | 分 (00..59) |
| %S | 秒 (00..60) |
| %% | 文字 % |
| %a | ロケール表示による曜日の省略名 (例: Sun、日) |
| %A | ロケール表示での曜日の完全名 (例: Sunday、日曜日) |
| %b | ロケール表示での月の省略名 (例: Jan) |
| %B | ロケール表示での月の完全名 (例: January) |
| %c | ロケール表示での日付と時刻 (例: Thu Mar 3 23:05:25 2005) |
| %C | 世紀。%Y と同様だが下2桁が省略される (例: 20) |
| %d | 月の中の何日目かを表す値 (例: 01) |
| %e | スペースで字幅調整された月の中の何日目かを表す値。%_d と同様 |
| %F | 完全形式の日付。 %Y-%m-%d と同様 |
| %g | ISO 週番号の最後の2桁 (%G 参照) |
| %G | ISO 週番号の年部分 (%V 参照)。通常は %V と同時に使用される |
| %h | %b と同様 |
| %j | 年の開始日からの日数 (001..366) |
| %k | スペース詰めの時 ( 0..23)。 %_H と同様 |
| %l | スペース詰めの時 ( 1..12)。 %_I と同様 |
| %n | 改行 |
| %N | ナノ秒 (000000000..999999999) |
| %p | AM または PM のロケールでの表示。不明な場合は空白 |
| %P | %p と同様だが、小文字で表示する |
| %r | ロケール12時間表示での時刻 (例 11:11:04 PM) |
| %R | 24時間表示での時および分。%H:%M と同様 |
| %s | 1970-01-01 00:00:00 UTC からの秒数 |
| %t | 水平タブ |
| %T | 時刻。%H:%M:%S と同様 |
| %u | 週の何日目かを表す値 (1..7); 1 が月曜日 |
| %U | 日曜日を週初めとした週番号 (00..53) |
| %V | ISO 週番号。月曜日を週初めとする (01..53) |
| %w | 週の何日目かを表す値 (0..6); 0 を日曜日とする |
| %W | 月曜日を週初めとした週番号 (00..53) |
| %x | ロケール表示での日付 (例: 12/31/99) |
| %X | ロケール表示での時刻 (例: 23:13:48) |
| %y | 西暦での年の下2桁 (00..99) |
| %z | +hhmm 形式でのタイムゾーン (例: -0400) |
| %:z | +hh:mm 形式でのタイムゾーン (例: -04:00) |
| %::z | +hh:mm:ss 形式でのタイムゾーン (例: -04:00:00) |
| %:::z | 必要な精度に応じて : が使用されるタイムゾーン表示 (例: -04, +05:30) |
| %Z | 英字でのタイムゾーン省略形 (例: EDT) |
ここでは、よく利用するオプションと日付フォーマットを TablePress の表にまとめています。
フォーマット指定子は組み合わせて使えるため、用途に応じて読みやすい形式・扱いやすい形式を選んでください。
より詳細なオプションやフォーマット指定子については、Linux の
date(1) マニュアルページ(英語)
などの公式ドキュメントもあわせて参照してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
![]()
にほんブログ村