【Linux】dateコマンドの使い方めも

Linux

業務中、Linixでdateコマンドを使う機会がたまにあるのですが、
使用頻度が絶妙に少なくてオプションの内容だったりを使いたいときにパッと出てこないことが多々……。

そこで、dateコマンドの使い方とこれを使ってやれることをここにメモ。

dateコマンドとは

特定の日時情報を取得したいときに使用するコマンド。

dateコマンドの使用例

現在の日時を取得

$ date
Sat Jan 09 00:24:37 JST 2026

上記はオプションなしでdateコマンドを実行した場合の例。
このように「曜日、月、日、時刻、タイムゾーン、年」が出力される。

出力内容は、以下のようにフォーマットを指定することでカスタマイズすることもできる。

$ date +%Y%m%d
20260109

$ date +%Y-%m-%d
2026-01-09

$ date "+%Y-%m-%d %H:%M:%S"
2026-01-09 00:30:10

また、以下のように%の直後に”-“(ハイフン)を入れて実行することで、
月や日をゼロ埋めなしの1桁で表示することもできる。

$ date +%Y-%-m-%-d
2026-1-9

現在からn日後、n日前の日付を取得

“–date ‘n day'”と書くことでn日後、さらに後ろに”ago”と付けることでn日前の日付を出力できる。

# 現在日
$ date +%Y%m%d
20260110

# 現在から1日後
$ date +%Y%m%d --date '1 day'
20260111

# 現在から1日前
$ date +%Y%m%d --date '1 day ago'
2026010

# 現在から1ヶ月後
$ date +%Y%m%d --date '1month'
20260210

# 現在から1年後
$ date +%Y%m%d --date '1year'
20270110

nヶ月後(前)やn年後(前)の日付を取得する場合、月の日数うるう年に注意。

# 5/31の1ヶ月後を表示する例(6/31は存在しないため、7/1が取得される)
$ date "+%Y-%m-%d" --date "2026-05-31 1month"
2026-07-01

# 2024/02/29の1年後を表示する例(2025年はうるう年ではないため、2025/03/01が取得される)
$ date "+%Y-%m-%d" --date "2024-02-29 1year"
2025-03-01

また、少しややこしい気もするが、以下のように負の数を指定することも可能。

# -1日後(=1日前)の日付を取得
$ date +%Y%m%d --date '-1 day'
20260109

1970年01月01日 0:00:00(UTC)からの経過秒数を取得

下記のようにコマンドを実行することで1970年01月01日 0:00:00(UTC)からの経過秒数を出力可能。
なお、使う機会がどれくらいあるのかは不明……。

# 1970年01月01日 0:00:00(UTC)からの経過秒数
$ date +%s
1767974479

# 上で取得した経過秒数を年月日_時分秒に変換
$ date +%Y%m%d_%H%M%S --date="@1767974479"
20260110_010119

現在時刻をミリ秒/マイクロ秒/ナノ秒単位で取得

下記のように指定することでミリ秒、マイクロ秒、ナノ秒単位での出力も可能。
これはエンジニアな人はそこそこに使う機会もありそう。

# ミリ秒
$ date +%Y%m%d_%H:%M:%S.%3N
20260110_01:08:28.860

# マイクロ秒
$ date +%Y%m%d_%H:%M:%S.%6N
20260110_01:08:45.260406

# ナノ秒
$ date +%Y%m%d_%H:%M:%S.%N
20260110_01:08:55.505259662

dateコマンドの使用例(応用編)

日時情報を含むディレクトリの作成

一例として、dateコマンドで取得できる日時情報を使用したディレクトリ作成の例。
作成したディレクトリ名に日時が反映される。
「’」や「”」ではなく「`」で囲むということに要注意。

$ mkdir test_`date +%Y%m%d_%H%M%S`
$ ll
total 0
drwxrwxrwx 1 xxx xxx 4096 Jan 10 01:13 ./
drwxrwxrwx 1 xxx xxx 4096 Jan 10 01:12 ../
drwxrwxrwx 1 xxx xxx 4096 Jan 10 01:13 test_20260110_011308/

上記はあくまでも一例です。
たとえば、試験で使うシェルスクリプトに組み込むことで出力するログファイルのファイル名に日時を含ませるetc…使い方の幅は広い。

コメント