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. スクリプト: ログタイムスタンプや経過時間計測に活用
関連記事: