date コマンド入門 - 日付の書式・計算・タイムゾーン操作

date コマンド入門 - 日付の書式・計算・タイムゾーン操作

date コマンドってなに?

リナ: ライニー先輩、バックアップのファイル名に「今日の日付」を入れたいんですけど、毎回手で打つしかないんですか…?
ライニー先輩: そこで date コマンドだよ。実行すると今の日時が出るし、date +%Y%m%d みたいに書けば 20260605 の形に整形してくれる。ファイル名にもそのまま使えるんだ。
リナ: えっ、コマンド1つで日付が作れるんですか!
ライニー先輩: そう。しかも「3日前」「来週の金曜」みたいな計算や、タイムゾーンの切り替えまでできる。今日はその基本をひと通り見ていこう。

date は、現在の日時を表示したり、好きな書式に整形したりするコマンドです。ログのタイムスタンプ、バックアップのファイル名、スクリプト内の日付計算など、実務で毎日のように使う定番コマンドです。

一言でいうと

date +書式 で「好きな形の日付文字列」が作れる。

例: date +%Y-%m-%d2026-06-05

この記事でわかること

  • date で現在の日時を表示し、date +%F などで好きな書式に整形できる
  • %Y %m %d などの 書式指定子 を組み合わせて自由なフォーマットを作れる
  • date -d "3 days ago" のように 昨日・N日後・来週 などの日付を計算できる
  • date +%s でエポック秒(Unix 時間)を取得し、date -d @秒数 で日付に戻せる
  • TZ='UTC' datedate -uタイムゾーンを切り替え られる
  • Linux(GNU date)と macOS(BSD date)で構文が違う点に注意できる

1. まずは現在時刻を表示する

結論: 引数なしの date で現在の日時が出る。表示形式を変えたいときは date +書式 を使う。

引数なしで実行すると、現在の日時が表示されます。

$ date
2026年  6月  5日 金曜日 15:52:59 JST

表示される文字列(曜日や JST の部分)は、システムの ロケールタイムゾーン の設定によって変わります。英語環境なら Fri Jun 5 15:52:59 JST 2026 のように表示されます。

「年月日だけ欲しい」「時刻だけ欲しい」というときは、次の章の書式指定を使います。

2. 書式を自由に変える(%Y %m %d…)

結論: date + の後ろに %Y(年)%m(月)%d(日)などの記号を並べると、好きな形に整形できる。

+ の後ろに 書式指定子 を書くと、その形で日付が出ます。

$ date +%Y-%m-%d
2026-06-05
$ date "+%Y/%m/%d %H:%M:%S"
2026/06/05 15:52:59

書式の中にスペースを入れたいときは、全体を "..."(ダブルクォート)で囲みます。囲まないとスペースで区切られてエラーや意図しない結果になります。

2-1. よく使う書式指定子

指定子 意味
%Y 西暦4桁 2026
%m 月(01〜12) 06
%d 日(01〜31) 05
%H 時(00〜23) 15
%M 分(00〜59) 52
%S 秒(00〜59) 59
%A 曜日(フル) Friday
%a 曜日(短縮) Fri
%j 年間通算日 156
%s エポック秒 1780642379
リナ: 指定子がいっぱいあって覚えられる気がしません…
ライニー先輩: 全部覚えなくて大丈夫。実はよく使う組み合わせには ショートカット が用意されてるんだ。

2-2. 便利なショートカット

$ date +%F
2026-06-05
$ date +%T
15:52:59
  • %F%Y-%m-%d と同じ(ISO 8601 形式の日付)
  • %T%H:%M:%S と同じ(時刻)

迷ったら %F(日付)と %T(時刻)を覚えておけば、たいていの場面で困りません。

3. ファイル名・ログに使うテンプレート

結論: $(date +%Y%m%d) をファイル名に埋め込むと、日付つきのファイルが自動で作れる。

$(...) でコマンドの結果を文字列に埋め込めます(コマンド置換)。バックアップなどで定番のテクニックです。

$ cp data.db "backup-$(date +%Y%m%d).db"

これで backup-20260605.db というファイルが作られます。

$ echo "[$(date '+%Y-%m-%d %H:%M:%S')] 処理を開始" >> app.log

ログに自分でタイムスタンプを付けたいときの形です。出力例:

[2026-06-05 15:52:59] 処理を開始

ファイル名には :(コロン)を含む %T をそのまま使わないようにしましょう。一部の環境やファイルシステムでは扱いにくくなります。時刻を入れるなら %H%M%S(区切りなし)が無難です。

4. 日付を計算する(昨日・3日後・N日前)

結論: date -d "文字列" を使うと、「昨日」「3日後」「来週の金曜」などを英語で指定して計算できる。

-d(または --date)オプションに、計算したい日付を 英語の表現 で渡します。

$ date -d "yesterday" +%F
2026-06-04
$ date -d "3 days ago" +%F
2026-06-02
$ date -d "next friday" +%F
2026-06-12

基準となる日付からの計算もできます。

$ date -d "2025-01-01 +30 days" +%F
2025-01-31
リナ: 「30日後」って自分で電卓を叩くと、月をまたぐところで必ず間違えるんですよね…
ライニー先輩: そう、そこを date が正確にやってくれる。月末や閏年もちゃんと計算してくれるから、手計算よりずっと安全だよ。

よく使う指定の例

  • tomorrow / yesterday(明日 / 昨日)
  • 3 days ago / 2 weeks / 1 month(N日前 / N週後 / Nか月後)
  • next monday / last sunday(次の月曜 / 前の日曜)

これらの 相対日付の計算は GNU date(Linux)の機能 です。macOS では構文が違うので動きません。詳しくは 7章 で説明します。

5. エポック秒(Unix 時間)との変換

結論: date +%s で「1970年からの経過秒数」を取得でき、date -d @秒数 で日付に戻せる。

エポック秒(Unix 時間) とは、1970年1月1日 00:00:00 UTC からの経過秒数のことです。プログラムやログで時刻を扱うときの共通フォーマットとして広く使われます。

$ date +%s
1780642379

逆に、エポック秒を人間が読める日付に戻すには @ を付けます。

$ date -d @1700000000 "+%Y-%m-%d %H:%M:%S"
2023-11-15 07:13:20

ログに 1700000000 のような数字だけが記録されていて読めない、というときに date -d @その数字 を使うと一発で日付に変換できます。

6. タイムゾーンを切り替える(TZ / -u)

結論: date -u で UTC、TZ='地域名' date で任意のタイムゾーンの時刻を表示できる。

-u を付けると UTC(協定世界時) で表示されます。

$ date -u "+%Y-%m-%d %H:%M %Z"
2026-06-05 06:52 UTC

特定の地域の時刻を見たいときは、TZ という環境変数をその場で指定します。

$ TZ='America/New_York' date "+%Y-%m-%d %H:%M %Z"
2026-06-05 02:52 EDT
$ TZ='Asia/Tokyo' date "+%Y-%m-%d %H:%M %Z"
2026-06-05 15:52 JST
リナ: TZ=... をコマンドの前に書くと、その1回だけタイムゾーンが変わるんですか?
ライニー先輩: そう。TZ='地域名' date の形にすると、その date を実行する間だけ有効になる。システム全体の設定は変わらないから安心して試せるよ。
リナ: 海外のサーバーの時刻を確認したいときに便利そう!

TZ に指定できる地域名(例: Asia/Tokyo / America/New_York / Europe/London)は、timedatectl list-timezones で一覧を確認できます。TZ は環境変数なので、環境変数の使い方 も合わせて読むと理解が深まります。

7. macOS(BSD date)との違いに注意

結論: Linux の date は GNU 版。macOS の date は BSD 版で、日付計算やエポック変換の構文が違う。

この記事のコマンドは Ubuntu などの Linux(GNU coreutils の date) を前提にしています。macOS のターミナルに入っている dateBSD 版 で、一部のオプションが異なります。

やりたいこと Linux(GNU) macOS(BSD)
3日前を計算 date -d "3 days ago" date -v-3d
エポック秒→日付 date -d @1700000000 date -r 1700000000
文字列から日付を解釈 date -d "2025-01-01" date -j -f "%Y-%m-%d" "2025-01-01"

ネットで見つけた date -d ... のコマンドが macOS で「illegal option」のように怒られたら、BSD 版を使っている可能性が高いです。date --version を実行して GNU coreutils と出れば GNU 版です。

ミニ課題:今日の3日後の日付を `YYYY/MM/DD` 形式で表示してみよう

ヒント: -d で日付を計算し、+書式 で形を整えます。

答え:

$ date -d "3 days" "+%Y/%m/%d"
2026/06/08

"3 days" は「今から3日後」という意味です。"+3 days" と書いても同じです。

まとめ

やること コマンド
現在の日時を表示 date
年月日だけ表示 date +%F(= date +%Y-%m-%d
時刻だけ表示 date +%T
ファイル名用の日付 date +%Y%m%d
日付を計算する date -d "3 days ago" +%F
エポック秒を取得 date +%s
エポック秒を日付に戻す date -d @1700000000
UTC で表示 date -u
タイムゾーンを指定 TZ='Asia/Tokyo' date

今すぐ試せる 3 ステップ

  1. date +%F で今日の日付を表示する
  2. date -d "tomorrow" +%F で明日の日付を計算する
  3. cp なにか.txt "backup-$(date +%Y%m%d).txt" で日付つきファイルを作る

次に読む