dateコマンドの使い方|日付・時刻の表示から書式指定・設定変更までコマンド


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, システム管理コマンド > dateコマンドの使い方|日付・時刻の表示から書式指定・設定変更までコマンド
「ログのタイムスタンプを特定の形式で取得したい」
「シェルスクリプトで日付付きファイル名を作りたい」
こうした場面で欠かせないのが、dateコマンドです。

この記事では、dateコマンドの基本的な使い方から書式指定、相対日付の指定、シェルスクリプトでの活用法まで、実務で必要な知識をまとめて解説します。

dateコマンドとは?日付・時刻操作の基本

dateは、Linuxシステムの日付と時刻を表示・設定するコマンドです。

単に現在時刻を確認するだけでなく、書式を指定して任意のフォーマットで日時を出力できるため、シェルスクリプトでのファイル名生成やログ記録で頻繁に使われます。

また、「昨日の日付」「3日前」といった相対的な日時指定もでき、バックアップスクリプトなどで重宝します。

dateコマンドの基本的な使い方

1. 現在の日時を表示する

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

$ date 2026年 3月 17日 月曜日 10:30:45 JST

表示形式はシステムのロケール設定によって異なります。日本語環境では上記のように表示されます。

2. 書式を指定して表示する

+ に続けて書式文字列を指定すると、任意のフォーマットで日時を出力できます。

# YYYY-MM-DD形式 $ date +%Y-%m-%d 2026-03-17 # YYYY/MM/DD HH:MM:SS形式 $ date "+%Y/%m/%d %H:%M:%S" 2026/03/17 10:30:45 # 年月日のみ(ハイフンなし) $ date +%Y%m%d 20260317

※ 書式文字列にスペースを含む場合は、ダブルクォートで囲む必要があります。

3. よく使う書式一覧

以下がdateコマンドで頻繁に使う書式指定子です。

%Y:西暦(4桁)例:2026
%m:月(01~12)
%d:日(01~31)
%H:時(00~23、24時間表記)
%M:分(00~59)
%S:秒(00~59)
%T:時刻(%H:%M:%Sと同じ)例:10:30:45
%A:曜日(ロケール依存)例:月曜日
%s:UNIXタイムスタンプ(1970年1月1日からの秒数)
%N:ナノ秒
%Z:タイムゾーン名 例:JST

4. 特定の日時を指定して表示する(-dオプション)

-d(または --date)オプションを使うと、現在以外の日時を指定して表示できます。相対的な指定も可能です。

# 昨日の日付を表示する $ date -d "yesterday" +%Y-%m-%d 2026-03-16 # 3日前の日付を表示する $ date -d "3 days ago" +%Y-%m-%d 2026-03-14 # 1週間後の日付を表示する $ date -d "1 week" +%Y-%m-%d 2026-03-24 # 来月の1日を表示する $ date -d "next month" +%Y-%m-01 2026-04-01 # 特定の日時を指定する $ date -d "2026-01-15 09:00:00" "+%Y年%m月%d日 %H時%M分" 2026年01月15日 09時00分

この機能はシェルスクリプトで「昨日のログファイル名」を生成するときなどに非常に便利です。

実務で使えるdate活用テクニック

5. シェルスクリプトで日付付きファイル名を作る

バックアップスクリプトで最もよく使うパターンです。$(date +書式) でコマンド置換を使います。

# バックアップファイルに日付を付ける $ tar czf backup_$(date +%Y%m%d).tar.gz /var/www/html/ # 日時(時分秒)まで付ける $ cp /etc/httpd/conf/httpd.conf httpd.conf.$(date +%Y%m%d_%H%M%S) # 昨日の日付でログファイル名を生成する $ YESTERDAY=$(date -d "yesterday" +%Y%m%d) $ cat /var/log/app/access_${YESTERDAY}.log

6. ログファイルにタイムスタンプを付ける

スクリプトの実行ログにタイムスタンプを付けるのは、トラブル時の原因調査に役立ちます。

# スクリプト内でタイムスタンプ付きログを出力する例 echo "[$(date '+%Y-%m-%d %H:%M:%S')] バックアップ開始" >> /var/log/backup.log tar czf /backup/data_$(date +%Y%m%d).tar.gz /var/data/ echo "[$(date '+%Y-%m-%d %H:%M:%S')] バックアップ完了" >> /var/log/backup.log

7. 経過時間を計測する

%s でUNIXタイムスタンプ(秒数)を取得できるので、処理の開始時刻と終了時刻の差で経過時間を計測できます。

# 処理時間を計測するスクリプト例 START=$(date +%s) # ここに時間のかかる処理を書く sleep 5 END=$(date +%s) ELAPSED=$((END - START)) echo "処理時間: ${ELAPSED}秒"

8. システム日時を変更する

-s オプションでシステムの日時を手動設定できます。root権限が必要です。

# システム日時を設定する(root権限が必要) $ sudo date -s "2026-03-17 10:00:00" 2026年 3月 17日 火曜日 10:00:00 JST

ただし、現在のLinuxでは timedatectl コマンドを使うのが推奨されています。NTP同期が有効な環境で date -s を実行すると、すぐにNTPサーバーの時刻に戻されてしまうためです。

# timedatectlで日時を設定する(推奨) $ sudo timedatectl set-time "2026-03-17 10:00:00" # 現在の時刻同期の状態を確認する $ timedatectl status

dateコマンドのトラブルシュートとよくあるミス

「invalid date」が出る場合

dateコマンドで「invalid date」エラーが出る原因のほとんどは、日付文字列のフォーマットが正しくないケースです。

# NG - スラッシュ区切りは環境によって解釈が異なる $ date -d "03/17/2026" date: invalid date '03/17/2026' # OK - ハイフン区切りのISO 8601形式を使う $ date -d "2026-03-17"

日付の指定は YYYY-MM-DD(ISO 8601形式)を使うのが最も確実です。

タイムゾーンが意図と異なる場合

dateコマンドはシステムのタイムゾーン設定に従って動作します。異なるタイムゾーンで表示したい場合は、TZ 環境変数を一時的に設定します。

# UTC(協定世界時)で表示する $ TZ=UTC date Mon Mar 17 01:30:45 UTC 2026 # ニューヨーク時間で表示する $ TZ=America/New_York date # 現在のタイムゾーン設定を確認する $ timedatectl show --property=Timezone Timezone=Asia/Tokyo

本記事のまとめ

やりたいこと コマンド
現在の日時を表示する date
YYYY-MM-DD形式で表示する date +%Y-%m-%d
時刻のみ表示する date +%T
昨日の日付を取得する date -d "yesterday" +%Y-%m-%d
N日前の日付を取得する date -d "3 days ago" +%Y-%m-%d
UNIXタイムスタンプを取得する date +%s
日付付きファイル名を生成する date +%Y%m%d
UTC時間で表示する TZ=UTC date

シェルスクリプトの基礎から体系的に学びませんか?

dateコマンドはシェルスクリプトの中で頻繁に使われますが、現場で活躍するにはスクリプト全体を書ける力が必要です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

<<関連記事>>
・pstree
・chsh
・finger
・duコマンドでディスク使用量を確認する方法|ディレクトリごとの容量や容量順ソートも
・LinuxのOSバージョンを確認するコマンド|uname・os-release・hostnamectlの使い方

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る