言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. date / cal

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 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)です。
%sUnix タイムスタンプ(エポック秒)です。
%Zタイムゾーン名(例: JST)です。
%Y%m%dYYYYMMDD 形式(例: 20260306)です。
%Y-%m-%d %H:%M:%SISO 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..."』を使う方法もあります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。