2026年11月10日

2026年11月10日

dateコマンドで日時を確認・設定する方法

はじめに

シェルスクリプトを書いていれば必ずお世話になるdateコマンドは、現在時刻の表示だけでなく、フォーマット指定、相対日時の計算、UNIXタイムスタンプとの相互変換まで幅広くこなす万能ツールです。バックアップファイル名に日付を埋め込んだり、N日前の日付を計算したり、ログのタイムスタンプを変換したり、さまざまな場面で利用されます。

GNU版のdate(多くのLinuxディストリビューションで採用)は、-dオプションで自然言語に近い日時指定が可能で、macOS(BSD版)とは引数が異なる点にだけ注意が必要です。

本記事では、dateコマンドの実用テクニックを場面別に紹介します。

症状・背景

  • バックアップファイル名に日付を入れてユニーク化したい
  • 「30日前の日付」を自動計算したい
  • ログのUNIXタイムを人間可読な時刻に変換したい
  • スクリプト内で年月日を組み立てたい

手順・設定方法

ステップ1: 基本表示とフォーマット指定

よく使う書式を押さえます。

# 現在時刻(ロケール依存)
date

# ISO 8601形式
date -Iseconds

# カスタムフォーマット
date "+%Y-%m-%d %H:%M:%S"

# ファイル名向けの日時
date "+%Y%m%d_%H%M%S"

# UTC表示
date -u

ステップ2: 相対日時の計算

-dで過去・未来の日付を取得します。

# 昨日の日付
date -d "yesterday" +%Y-%m-%d

# 7日前
date -d "7 days ago" +%Y-%m-%d

# 1ヶ月後
date -d "1 month" +%Y-%m-%d

# 来週金曜日
date -d "next friday" +%Y-%m-%d

# 特定日からの相対
date -d "2026-01-01 +90 days" +%Y-%m-%d

ステップ3: UNIXタイムスタンプとの変換

ログ解析やAPI連携で頻出します。

# 現在のUNIXタイム取得
date +%s

# UNIXタイム → 日時に変換
date -d @1715680800

# ISO日時 → UNIXタイム
date -d "2026-05-14 12:00:00" +%s

# ナノ秒精度
date +%s.%N

ステップ4: シェルスクリプトでの活用

実用パターンを覚えておきます。

# バックアップファイル名
backup_file="db_$(date +%Y%m%d_%H%M%S).sql.gz"
mysqldump mydb | gzip > "$backup_file"

# ログにタイムスタンプを付与
echo "[$(date -Iseconds)] 処理開始" >> /var/log/myapp.log

# 古いファイルを削除(30日以上前)
find /backup -type f -mtime +30 -delete

# 経過時間の計測
start=$(date +%s)
sleep 3
echo "経過: $(($(date +%s) - start)) 秒"

注意事項

  • date -s "..."での時刻設定は手動設定であり、NTP有効時は推奨されない
  • macOS(BSD)版のdateは-dの構文が異なる、date -jを使う必要がある
  • ロケール依存の出力は環境によって変わる、スクリプトではLC_ALL=Cを指定
  • タイムゾーンに注意、TZ=UTC dateで一時的に切り替え可能

まとめ

1. 基本書式: +%Y-%m-%d %H:%M:%S 形式が定番

2. 相対日時: -d "N days ago" で過去日を簡単に算出

3. UNIXタイム: +%s と -d @TIMESTAMP で相互変換

4. ファイル名: $(date +%Y%m%d_%H%M%S) でユニーク化

5. スクリプト: ログタイムスタンプや経過時間計測に活用

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲