date / cal
『date』は現在の日付・時刻を取得・フォーマットするコマンドです。『cal』はカレンダーを表示します。シェルスクリプトでのログファイル名生成やバックアップ命名に欠かせないコマンドです。
構文
現在の日付・時刻を表示します。
date
フォーマットを指定して表示します。
date +フォーマット文字列
日付をフォーマットして変数に代入します。
today=$(date +%Y-%m-%d)
指定した日時を表示します(GNU date のみ)。
date -d "日時文字列"
N日前/後の日付を計算します(GNU date のみ)。
date -d "7 days ago" +%Y-%m-%d
今月のカレンダーを表示します。
cal
March 2026
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
年を指定すると、1年分のカレンダーを表示します。
cal 2026

月と年を指定すると、その月のカレンダーを表示します。
cal 3 2026
March 2026
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
フォーマット文字列一覧
| フォーマット | 概要・出力例 |
|---|---|
| %Y | 西暦4桁(例: 2026)です。 |
| %m | 月(01〜12)です。 |
| %d | 日(01〜31)です。 |
| %H | 時間(00〜23)です。 |
| %M | 分(00〜59)です。 |
| %S | 秒(00〜59)です。 |
| %A | 曜日の英語フルネーム(例: Friday)です。 |
| %a | 曜日の英語略称(例: Fri)です。 |
| %B | 月の英語フルネーム(例: March)です。 |
| %s | Unix タイムスタンプ(エポック秒)です。 |
| %Z | タイムゾーン名(例: JST)です。 |
| %Y%m%d | YYYYMMDD 形式(例: 20260306)です。 |
| %Y-%m-%d %H:%M:%S | ISO 8601 風(例: 2026-03-06 12:00:00)です。 |
サンプルコード
現在の日付を表示します。
date Fri Mar 6 12:00:00 JST 2026
フォーマットを指定して日付と日時を表示します。
echo "今日: $(date +%Y-%m-%d)" 今日: 2026-03-06
echo "現在時刻: $(date '+%Y-%m-%d %H:%M:%S')" 現在時刻: 2026-03-06 12:00:00
シェルスクリプトとして記述する場合はこうなります。
date_sample.sh
echo "今日: $(date +%Y-%m-%d)" echo "現在時刻: $(date '+%Y-%m-%d %H:%M:%S')"
bash date_sample.sh 今日: 2026-03-06 現在時刻: 2026-03-06 12:00:00
バックアップファイル名に日付を使います。
backup.sh
today=$(date +%Y%m%d)
tar -czf "backup_${today}.tar.gz" /var/www/html/
echo "バックアップ完了: backup_${today}.tar.gz"
bash backup.sh バックアップ完了: backup_20260306.tar.gz
ログに日時スタンプを付ける関数を定義します。以下はシェルスクリプトに記述した場合です。
log_sample.sh
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "処理開始"
log "データ取得完了"
bash log_sample.sh [2026-03-06 12:00:00] 処理開始 [2026-03-06 12:00:03] データ取得完了
なお、関数の定義はターミナルでも直接入力できます。『{』の後で Enter を押すと『> 』マークが表示され、これは「まだ入力が続く」というサインで、『}』を入力すると定義が完了します。
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "処理開始"
[2026-03-06 12:00:00] 処理開始
log "データ取得完了"
[2026-03-06 12:00:03] データ取得完了
Unix タイムスタンプを使って処理時間を計測します。以下はシェルスクリプトに記述した場合です。
timer.sh
start=$(date +%s) sleep 2 end=$(date +%s) echo "処理時間: $((end - start)) 秒"
bash timer.sh 処理時間: 2 秒
GNU date(Linux)で相対的な日付を計算します。以下はシェルスクリプトに記述した場合です。
date_calc.sh
# 7日後の日付(Linux) date -d "7 days" +%Y-%m-%d # 7日前の日付(Linux) date -d "7 days ago" +%Y-%m-%d
bash date_calc.sh 2026-03-13 2026-02-27
macOS(BSD date)では『-v』オプションを使います。
date_calc.sh
# 7日後の日付(macOS) date -v+7d +%Y-%m-%d # 7日前の日付(macOS) date -v-7d +%Y-%m-%d
bash date_calc.sh 2026-03-13 2026-02-27
カレンダーを表示します。
cal 3 2026
March 2026
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
概要
スクリプトでのバックアップ命名には『$(date +%Y%m%d)』や『$(date +%Y%m%d_%H%M%S)』が定番です。ログ出力には『$(date '+%Y-%m-%d %H:%M:%S')』を関数化しておくと便利です。
『$ date -d』による相対日付計算は GNU date(Linux)専用の機能です。macOS(BSD date)では『$ date -v+7d』のように書きます。移植性が必要な場合は Python の『$ python3 -c "from datetime import..."』を使う方法もあります。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。