日付を知りたいときに使うdateコマンドについて、dateマニュアル(man date)とヘルプ(date --help)を調べ、実例を追加するなどしてまとめてみました。
書式などは、マニュアルの表記に準ずるように記載しています。
- コマンド名:date
- セクション番号:1(実行プログラムまたはシェルコマンド)
- バージョン:9.4(GNU coreutils)(January 2026)
SYNOPSIS(dateコマンドの書式)
dateコマンドは「日時を表示する」コマンドです。
マニュアルには以下の書式が記載されています。
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
dateマニュアルページによる書式(マニュアルルールに則り、太字などの文字体裁を補正して表示しています)
マニュアル表記のルールは、こちらを参考にしてください【マニュアル表記の統一ルール】
補足の書式
上記のdateマニュアル(man date)内に記載されているオプションを書式に反映させると以下のようになります。
date [ -d 'STRING' | -f DATEFILE | --resolution | -r FILE ] [ --debug ] [ -I[FMT] ] [ -R ] [ --rfc-3339=FMT ] [ -s 'STRING' ] [ -u ] [ --help ] [ --version ]... [+FORMAT]
dateマニュアルページに記載されているオプションを書式に反映させた補足の書式(マニュアルルールに則り、太字などの文字体裁を補正して表示しています)
書式のオプション名をクリックすると、各項目の説明欄に移動するようにリンクを設けています。使い方や説明などは、各項目欄でご確認ください。
DESCRIPTION(説明)
dateは、「日付と時刻を表示する」コマンドです。
dateを実行すると、
- 現在の時刻を表示します。【実行例1】
- FORMATを指定して、日付と時刻の表示をカスタマイズすることも可能です。【実行例2】
-sオプションもしくは[MMDDhhmm[[CC]YY][.ss]]([月日時分[[西暦(上2桁)]西暦(下2桁)][.秒]])が指定された場合は、日付と時刻を設定します。(説明は省略します)
実行例1:今現在の時刻を表示する例
date
実行すると以下のように表示されます。
(西暦)年 ○月 ○日 ○曜日 時:分:秒 JST
日付(西暦、年月日、曜日、時間、JST)がデフォルトのフォーマットで表示されます。FORMATを追加すると、表示をカスタマイズできます。
実行例2:今現在の時刻を%cフォーマットで表示する例
date "+%c"
実行すると以下のように表示されます。
(西暦)年○月○日 ○曜日 ○時○分○秒
日付(西暦、年月日、曜日、時間)が表示されます。(詳細はFORMAT参照)
OPTIONS(オプション)
dateマニュアル(man date)に記載されているオプションを、実例を追加するなどしてまとめました。
ロングオプションで必須となっている引数がある場合、ショートオプションでも同じようにその引数は必須です。
-dオプション(小文字d)
-d 'STRING' -d "STRING" --date='STRING' --date="STRING"
-dは、「STRINGで指定された時刻を表示する」オプションです。FORMATを同時に指定すると、指定された表示方法で表示します。
メモ:
- 「今現在」の時刻ではなく、STRINGとして記述された時間を表示します。【STRINGの記述方法参照】
yesterdayなどの相対的な日時や、【相対的な日時/実行例】1/28 19:56など時刻を直接指定する絶対的な日時を指定することも可能です。【絶対的な日時/実行例】- 複数の時間指定を同時に行うと、より細かな日時指定ができます。【複数の時間要素/実行例】
- 月の末日を表示するのは少し複雑です。【月末日を指定する方法/実行例】
- UNIX時間(1970年1月1日00:00UTCからの秒数)を「@」に続けて指定すると日時に変換して表示してくれます。【実行例1】
- 空の文字列は一日の始まりを示します。(infoドキュメント参照)【実行例2】
- 表示する日付を指定するオプション(
-d、-f、-r、--resolution) は同時に使用できません。
実行例1:UNIX時間@1775817296を日時に変換する例
date -d '@1775817296'
date --date='@1775817296'と同じ意味の記述方法です。指定すると以下のように表示されます。
2026年 4月 10日 金曜日 19:34:56 JST
UNIX時間が日時に変換されて表示されました。(UNIX時間を調べるにはdate -d '20260410 19:34:56' '+%s'を使います)
実行例2:2026年4月10日(金)12時34分56秒に’ ‘を指定した例
date -d ' '
dateだけを実行すると2026年 4月 10日 金曜日 12:34:56 JSTと表示されますが、上記を実行すると以下のような結果になります。
2026年 4月 10日 金曜日 00:00:00 JST
一日の始まりの時間「00:00:00」が表示されました。
–debug
--debugは、「デバッグを表示する」オプションです。
メモ:
- 指定した日付に対して注釈を付け、疑わしい使用法がある場合には、標準エラーに出力します。
- 実行例は省略します。
-fオプション(小文字f)
-f DATEFILE --file=DATEFILE
-fは、「ファイルに記述されている日付データを表示する」オプションです。
メモ:
実行例:2026年4月10日(金)12時34分56秒に「test_date.txt」という名前のファイルを呼び出す例
事前準備:ドキュメントディレクトリに「test_date.txt」という名前のファイルを作成する。
2000-1-1
1985-4-25 7:48:39
tomorrow
-2day
「test_date.txt」という名前のファイルの中の記述。ドキュメントディレクトリに準備してから以下を実行します。
(ユーザーネーム@PCネーム : ~$ で以下を実行)
date -f ドキュメント/test_date.txt
ドキュメントディレクトリにある「test_date.txt」を指定しています。実行すると以下のように表示されます。
2000年 1月 1日 土曜日 00:00:00 JST ⬅ 2000-1-1 が変換されました
1985年 4月 25日 木曜日 07:48:39 JST ⬅ 1985-4-25 7:48:39 が変換されました
2026年 4月 11日 土曜日 12:34:56 JST ⬅ tomorrow が変換されました
2026年 4月 8日 水曜日 12:34:56 JST ⬅ -2day が変換されました
時間のないデータは0時で表示され、7時は07時と表示されています。tomorrowは次の日が、-2dayは2日前の日付と時間が-dオプションと同じように表示されました。(FORMATを指定すると、さらに表示を制御できます)
-Iオプション(大文字アイI)
-I[FMT] --iso-8601[=FMT]
-Iは、「ISO8601形式で出力する」オプションです。
メモ:
FMTに指定できる値:
-Iや--iso-8601=に以下の値をそのまま続けて記述します。(FMTの値は表示内容を制御するものです。STRINGの相対的な日時とは解釈が異なります)
実行例1:-Idateを2026年4月10日(金)12時34分56秒に実行した例
date -Idate
「I」と「date」の間に半角スペースを入れずに指定します。【date -Iを実行した場合と同じです】実行すると以下のように表示されます。
2026-04-10
日付だけが表示されました。デフォルトの表示です。
実行例2:-Ihoursを2026年4月10日(金)12時34分56秒に実行した例
date -Ihours
「I」と「hours」の間に半角スペースを入れずに指定します。実行すると以下のように表示されます。
2026-04-10T12+9:00
日付と時間だけが表示されました。日付の後の「T」は時間、+9:00はタイムゾーンです。
実行例3:-Iminutesを2026年4月10日(金)12時34分56秒に実行した例
date -Iminutes
「I」と「minutes」の間に半角スペースを入れずに指定します。実行すると以下のように表示されます。
2026-04-10T12:34+9:00
「日付と時:分」まで表示されました。日付の後の「T」は時間、+9:00はタイムゾーンです。
実行例4:-Isecondsを2026年4月10日(金)12時34分56秒に実行した例
date -Iseconds
「I」と「seconds」の間に半角スペースを入れずに指定します。実行すると以下のように表示されます。
2026-04-10T12:34:56+9:00
「日付と時:分:秒」が表示されました。日付の後の「T」は時間、+9:00はタイムゾーンです。
実行例5:-Insを2026年4月10日(金)12時34分56秒に実行した例
date -Ins
「I」と「ns」の間に半角スペースを入れずに指定します。実行すると以下のように表示されます。
2026-04-10T12:34:56,・・・(ナノ秒)・・・+9:00
「日付と時:分:秒:ナノ秒」が表示されました。日付の後の「T」は時間を表し、+9:00はタイムゾーンです。
–resolution
--resolution
--resolutionは、「タイムスタンプの解像度を表示する」オプションです。
メモ:
- 時刻の解像度を表示します。【実行例】
- 表示する日付を指定するオプション(
-d、-f、-r、--resolution) は同時に使用できません。
実行例:
date --resolution
実行すると以下のように表示されます。
0.000000001
「1,000,000,000分の1」という結果が表示されました。
-Rオプション(大文字R)
-R --rfc-email
-Rは、「RFC5322形式で表示する」オプションです。
メモ:
- 日付と時刻をRFC5322形式で表示します。【実行例】
実行例:2026年4月10日(金)12時34分56秒に-Rオプションを実行する例
date -R
実行すると以下のように表示されます。
Fri, 10 Apr 2026 12:34:56 +0900
「曜日,日 月 西暦年 時:分:秒 タイムゾーン」が表示されました。
–rfc-3339
--rfc-3339=FMT
--rfc-3339は、「RFC3339形式で表示する」オプションです。
メモ:
- 日付と時刻をRFC3339形式で表示します。
- FMTは必ず指定しなければなりません。
FMTに指定できる値:
--rfc-3339=に以下の値を指定します。(FMTの値は表示内容を制御するものです。STRINGの相対的な日時とは解釈が異なります)
実行例1:2026年4月10日(金)12時34分56秒に--rfc-3339=dateを実行する例
date --rfc-3339=date
実行すると以下のように表示されます。
2026-04-10
「西暦-月-日」が表示されました。
実行例2:2026年4月10日(金)12時34分56秒に--rfc-3339=secondsを実行する例
date --rfc-3339=seconds
実行すると以下のように表示されます。
2026-04-10 12:34:56+09:00
日付の後に時間「時:分:秒」とタイムゾーンが表示されます。
実行例3:2026年4月10日(金)12時34分56秒に--rfc-3339=nsを実行する例
date --rfc-3339=ns
実行すると以下のように表示されます。
2026-04-10 12:34:56.・・・(ナノ秒)・・・+09:00
日付の後に時間「時:分:秒.ナノ秒」とタイムゾーンが表示されます。
-rオプション(小文字r)
-r FILE --reference=FILE
-rは、「ファイルの最終更新時刻を表示する」オプションです。
メモ:
- FILEには、ファイル名(パス)を指定します。【実行例】
- 表示する日付を指定するオプション(
-d、-f、-r、--resolution) は同時に使用できません。
実行例:ドキュメントディレクトリにある「test_date.txt」ファイルの最終更新時刻を表示する例
(ユーザーネーム@PCネーム : ~$ で以下を実行)
date -r ドキュメント/test_date.txt
ドキュメントディレクトリにある「test.txt」を指定しています。実行すると以下のように表示されます。
2026年 4月 5日 日曜日 23:45:18 JST
「test_date.txt」ファイルの最終更新日が表示されました。
-sオプション(小文字s)
-s 'STRING' -s "STRING" --set='STRING' --set="STRING"
-sは、「現在時刻を表示したり、設定したりする」オプションです。
メモ:
- STRINGで指定した時刻を表示したり設定します。
- 時刻を設定する場合は、管理者権限
sudoを付けて実行します。(実行例は省略します)
-uオプション(小文字u)
-u --utc --universal
-uは、「UTC時間を表示する」オプションです。
メモ:
- 実行時の協定世界時間(UTC)を表示します。【実行例】
実行例:2026年4月10日(金)12時34分56秒にUTC時間を表示した例
date -u
実行すると以下のように表示されます。【date --utcやdate --universalでも同じように動作します】
2026年 4月 10日 金曜日 03:34:56 UTC
協定世界時間(UTC)が表示されました。
–help
--help
--helpは、「ヘルプを表示する」オプションです。
メモ:
- 使い方を表示して終了します。
- 実行例は省略します。
–version
--version
--versionは、「バージョン情報を表示する」オプションです。
メモ:
- バージョン情報を表示して終了します。
- 実行例は省略します。
STRINGの記述方法
'STRING' "STRING"
STRINGは、「時刻を指定する際に記述する」日付文字列です。-dオプションと-sオプションで使用します。
メモ:
- 自由形式の日付文字列を「”シングルクォーテーション」か「””ダブルクォーテーション」で囲み、
'STRING'や"STRING"の形式で記述します。'yesterday'などの相対的な書き方で指定したり、【相対的な日時の指定方法】'2026-01-02'などの絶対的な書き方で指定することができます。【絶対的な日時の指定方法】- 複数の要素を指定するときは、半角スペースで区切ります。【複数の要素の指定方法】
- 空の文字列
' 'は一日の始まりを示します。(infoドキュメント参照)【実行例】
- 1つの要素のみで半角スペースを含まない場合は、「”シングルクォーテーション」や「””ダブルクォーテーション」は省略可能です。(例:
yesterday、2026-01-02)【実行例】 - STRINGには、カレンダー日付を示す項目が含まれる場合があります。(時刻、タイムゾーン、曜日、相対時間、相対的な日付や数字など)
- STRINGの後に、半角スペースで区切って
FORMATを指定した場合、STRINGをFORMATに沿って表示します。
相対的な日時の指定方法
相対的な日時とは、「今」を基準に、わかりやすい単語で日時を指定する方法です。「day」や「year」など、私達が理解している言語で指定できます。
実行例:2026年4月10日(金)12時34分56秒に「1日前」を指定した例(シングルクォーテーション省略可)
date -d yesterday
-dオプションを使って指定しています。要素が1つだけなので、シングル(ダブル)クォーテーションの省略が可能です。実行すると以下のように表示されます。
2026年 4月 9日 木曜日 12:34:56 JST
コマンドを実行した瞬間からの1日前の時刻が取得され、表示されます。
相対的な時間、日付、数字例:
(上記の実行例の「yesterday」の部分を以下の相対時間に書き換えれば完成です)
- [○日]は
day- [1日前]は
-1dayyesterday'-1 day''yesterday''1 day ago'など - [1日後]は
1daytomorrow'1 day''tomorrow'など - [N日前]は
-Nday'-N day''N day ago' - [N日後]は
Nday'N day'
- [1日前]は
- [○週間]は、
week- [1週間前]は
-1week'-1 week''1 week ago'など - [1週間後]は
1week'1 week'など - [N週間前]は
-Nweek'-N week''N week ago' - [N週間後]は
Nweek'N week'
- [1週間前]は
- [曜日]は、
SundayMondayTuesdayWednesdayThursdayFridaySaturdaySunMonTuesTueWedThuFriSat(小文字でもOK)- [前の金曜日]は
'-1week fri''-1 week fri'(-fri'-1 fri'は効きません。) - [次の金曜日]は
fri'1 fri''next friday'など - [N週間前の○曜日]は、
'-N week wed''-N week wed' - [N週間後の○曜日]は、
'N week mon''N week mon'
- [前の金曜日]は
- [○ヶ月]は、
month(注意事項参照)- [1ヶ月前]は、
-1month'-1 month''1 month ago'など - [1ヶ月後]は、
1month'1 month'など - [Nヶ月前]は、
-Nmonth'-N month''N month ago'など - [Nヶ月後]は、
Nmonth'N month'
- [1ヶ月前]は、
- [○年]は、
year- [1年前]は、
-1year'-1 year''1 year ago'など - [1年後]は、
1year'1 year'など - [N年前]は、
-Nyear'-N year''N year ago'など - [N年後]は、
Nyear'N year'
- [1年前]は、
- [○時間]は、
hour- [1時間前]は、
-1hour'-1 hour''1 hour ago'など - [1時間後]は、
1hour'1 hour'
- [N時間前]は、
-Nhour'-N hour''N hour ago'など - [N時間後]は、
Nhour'N hour'
- [1時間前]は、
- [○分]は、
minute- [1分前]は、
-1minute'-1 minute''1 minute ago'など - [1分後]は、
1minute'1 minute'
- [N分前]は、
-Nminute'-N minute''N minute ago'など - [N分後]は、
Nminute'N minute'
- [1分前]は、
- [○秒]は、
second- [30秒前]は、
-30second'-30 second''30 second ago'など - [30秒後]は、
30second'30 second'
- [N秒前]は、
-Nsecond'-N second''N second ago'など - [N秒後]は、
Nsecond'N second'
- [30秒前]は、
絶対的な日時の指定方法
絶対的な時間とは、日時を直接指定する方法です。「2026-01-02」など、決められたルールで指定します。
実行例:絶対日時として「12月31日、12時34分56秒」を指定する例
date -d '12/31 12:34:56'
-dオプションを使って指定しています。実行すると以下のように表示されます。
2026年 12月 31日 木曜日 12:34:56 JST
西暦や曜日を指定せずに実行しましたが、西暦と曜日は自動的に補完されて、日時が表示されます。「年」を指定したい場合は年を追加します。
年月日の指定
年月日の指定は、「–ハイフン」「/スラッシュ」「記号を使わない」指定方法があります。わかりやすいお気に入りの記述方法をあらかじめ決めておくと、後々応用が効くと思います。
日付の指定:(年月日)
- 「–ハイフン」を使う(西暦年-月-日)
2026-05-28と指定すると、2026年 5月 28日と表示されます。(最初の4桁は西暦、次の2桁は月、最後の2桁は日)10-02-13と指定すると、2010年 2月 13日が表示されます。(西暦2000年代を表し、最初の2桁は西暦の下2桁、次の2桁は月、最後の2桁は日)1999-4-3と指定すると、1999年 4月 3日が表示されます。(最初の4桁は西暦、次の1桁は月、最後の1桁は日)
- 「/スラッシュ」を使う(月/日/西暦年)(月/日)
01/02/2026と指定すると、2026年 1月 2日が表示されます。(最初の2桁は月、次の2桁は日、最後の4桁は西暦)03/04/05と指定すると、2005年 3月 4日が表示されます。(西暦2000年代を表し、最初の2桁は月、次の2桁は日、最後の2桁は西暦の下2桁)6/7/8と指定すると、0008年 6月 7日が表示されます。(最初の1桁は月、次の1桁は日、最後の1桁は西暦)6/7/08と指定すると、2008年 6月 7日が表示されます。(西暦2000年代を表し、最初の1桁は月、次の1桁は日、最後の2桁は西暦の下2桁)12/9と指定すると、(西暦当)年 12月 9日が表示されます。(記載省略は西暦当年を表し、最初の2桁は月、次の1桁は日)
- 「記号」を使わない(西暦年月日)[5桁以上の整数(負の整数を除く)]
20261231と指定すると、2026年 12月 31日と表示されます。(最初の4桁は西暦、次の2桁は月、最後の2桁は日)19870605と指定すると、1987年 6月 5日と表示されます。(最初の4桁は西暦、次の2桁は月、最後の2桁は日)050403と指定すると、2005年 4月 3日と表示されます。(西暦2000年代を表し、最初の2桁は西暦の下2桁、次の2桁は月、最後の2桁は日)0012と指定すると、00:12:00 JSTと時刻が表示されます。(4桁指定は、時間とみなされます)
時刻の指定
時刻の指定:(時分秒)
- 「:コロン」を使う(時:分:秒)
- 00:00:00は、「時:分:秒」を示します。(例:
12:34:56➡12:34:56 JSTと表示) - 00:00は、「時:分」を示します。(例:
12:34➡12:34:00 JSTと表示) - 00:は、エラーです。(例:
12:➡無効な日付ですと表示)時間は「:コロン」なしで00で指定します。
- 00:00:00は、「時:分:秒」を示します。(例:
- 記号を使わず整数のみで指定する
- 0〜23までの(1〜2桁の)値は、「時」を示します。(例:
2を指定➡02:00:00 JSTと表示) - 000〜2359(60進法、3〜4桁)までの値は、「時:分」を示します。(例:
513と指定➡05:13:00 JSTと表示) - 上記以外の値はエラーになります。(例:
24や2400など➡無効な日付ですとエラー表示) - 5桁以上の値は、「年月日」を探します。秒は表示しません。(
000001と指定➡無効な日付ですとエラー表示)
- 0〜23までの(1〜2桁の)値は、「時」を示します。(例:
日付と時刻を同時に指定(年月日 時分秒)
日付と時刻を同時に指定する:(年月日 時分秒)
- 上記の[日時の指定方法]と[時刻の指定方法]を半角スペースで区切り、「”シングルクォーテーション」か「””ダブルクォーテーション」で囲みます。
'20260901 23:45'と指定すると、2026年 9月 1日 ・略・ 23:45:00 JSTが表示されます。'23:47:59 20210618'と指定すると、2021年 6月 18日 ・略・ 23:47:59 JSTが表示されます。
複数の時間要素を使って指定する方法
相対的な時間と、絶対的な時間を組み合わせることで、より複雑な日時を指定することができます。
メモ:
- 複数の要素を指定する場合は、半角スペースで区切ります。【実行例1】
- 絶対日時を指定すると、その日時からの経過時間を計算します。【実行例2】
- 月末日(29.30.31日)に
monthを使う場合には注意が必要です。【実行例3/monthの注意事項】 - フォーマット形式を使うと、月末の日付を算出することができます。【実行例4/計算のしくみ】
実行例1:今から「2年3ヶ月と15日後、5時間30分後」の時間を取得して表示する例(現在の時刻を2026年3月7日午前2:15:11と仮定する)
date -d '2year 3month 15day 5hour 30minute'
-dオプションを使って指定しています。半角スペースで区切って記述します。実行すると以下のように表示されます。
2028年 6月 22日 木曜日 07:45:11 JST
すべて自動計算され、表示されました。※monthの注意事項を確認してください。
実行例2:2026年4月10日(金)午後5時36分02秒から「2日半後」の時間を取得し、表示する例
date -d '20260410 17:36:02 2day 12hour'
-dオプションを使って指定しています。午後5時は「17」と記述します。実行すると以下のように表示されます。
2026年 4月 13日 月曜日 05:36:02 JST
時間の指定を省略することも可能です。その場合の時間は「0:00:00」としてカウントされます。
monthの注意点、計算方法
相対時間のmonthを月末日で指定する場合は注意が必要です。
実行例3:2026年1月31日(金)から「1ヶ月後」の日付を取得し、表示する例
date -d '20260131 1month'
-dオプションを使って指定しています。「2月28日」が表示されることを想定してしまいそうですが、実行すると以下のように表示されます。
2026年 3月 3日 火曜日 00:00:00 JST
「1月31日の1ヶ月後は3月3日」と表示されました。これが意図した結果なら問題ありませんが、意図した結果と異なる場合は、注意が必要です。
説明:
そもそもmonthは相対的な時間の考え方で「指定月の○ヶ月前・後に該当する日」を表示します(1monthなら翌月を、-6monthなら半年前を表示するなど)。
| 「(単純な)該当月の該当日」 例:1月31日の1ヶ月後は2月31日? 例:2月15日の1ヶ月後は3月15日? | ➡<該当日あり>そのままの日付を表示する (例:2月15日の1ヶ月後は「3月15日」➡該当日あり) |
| ➡<該当日なし>以下の計算式により、日付を計算 (例:1月31日の1ヶ月後は「2月31日」➡該当日なし) |
指定月に該当日が存在しない場合は、以下のように計算されて表示されます。(筆者調べ)
<該当日なし?>[yes]➡ [(単純な)該当月の該当日] – [該当月の総日数] = [翌月の日付]
例えば、monthで計算した結果として(単純な)該当月の該当日が「2月31日」や「4月31日」となったとしても、それらの日付は存在しません。そこで、2月の場合には「2月31日から28日(2月の総日数)を引いて(翌月の)3月3日」が表示され、4月の場合は「4月31日から30日(4月の総日数)を引いて(翌月の)5月1日」が表示されます。
メモ:(monthを使う場合の覚書き)
- [28日]を
monthで移動するときは、date -d " `date '+%Y%m28' ` 0month"(当月を基準にmonthの整数値を変更すると、○ヶ月前、○ヶ月後を指定できます) - [29〜30日]を
monthで移動するときは、上記の「該当日なし」が当てはまる月があるので注意が必要です。 - [月末日]を
monthで移動するときは、次項の説明を参照ください
月末日を指定する方法、考え方
毎月の月末は、1月31日、2月28日、3月31日…と、月により日付が異なります。そのような末日の日付を取得する方法です。
実行例4:当月の末日を求める例(4月に実行した場合の例)
date -d " `date '+%Y%m01' ` -1day 1month"
-dオプションを使って指定しています。実行すると以下のように表示されます。
2026年 4月 30日 木曜日 00:00:00 JST
「4月の末日」が表示されました。詳しい説明は以下を参照ください。
メモ:(「いつ」の月末を求めるかにより異なる記述の覚書き)
- [前月]の月末日は、
date -d "`date '+%Y%m01' ` 0month -1day "(0monthは省略可能) - [半年前]の月末日は、
date -d "`date '+%Y%m01' ` -5month -1day " - [当月(今月)]の月末日は、
date -d "`date '+%Y%m01' ` 1month -1day " - [来月]の月末日は、
date -d "`date '+%Y%m01' ` 2month -1day " - [半年後]の月末日は、
date -d "`date '+%Y%m01' ` 7month -1day "
考え方:
- はじめに月初日を求めて、その前日を月末日とする考え方です。(○月1日の1日前は、前月の月末の日付)
- ○月1日は、
`date '+%Y%m01' `と記述します。(「“バッククォーテーション」で囲んで01日を取得します) - 月初日の前日は、
"`date '+%Y%m01' ` -1day "です。(01日の前日=月末の日付) - いつの月末日を求めるかを指定するには、以下の表を参考に「今月末のmonthの値を
1month」として○ヶ月分を「±プラスマイナス」します。
- ○月1日は、
month早見表:
| 1年前 | 6ヶ月前 | 先々月末 | 先月末 | 今月末 | 来月末 | 再来月末 | 半年後 | 1年後 |
| -11month | -5month | -1month | 0month | 1month | 2month | 3month | 7month | 13month |
FORMAT
'+FORMAT' "+FORMAT"
FORMATは、出力形式を制御して表示します。FORMATの記述は必須ではありません。省略した場合は、デフォルトの表示形式で表示されます。【デフォルトの出力を見る】
メモ:
- FORMATを指定する時は、「+プラス記号」に続けてFORMATを記述し「”シングルクォーテーション」か「””ダブルクォーテーション」で囲みます。【実行例1】
- オプションを使用すると、和暦や曜日を調べることができます。【実行例2】
- UNIX時間(エポック秒)を出力することも可能です。【実行例3】
実行例1:2026年4月10日(金)23時45分06秒に以下のフォーマットを指定した例(各フォーマットをクリックすると説明箇所に移動します)
date '+%n------------FORMATの見本です------------%n現在の日時は、西暦%Y年(%EC%Ey年)%_m/%_d(%a)%t%p%l時%_M分%_S秒です。%n1月1日から数えると%j日目です。%n%%の文字は「%%%%」と記述します。%n半角スペースも機能します%n ・半角スペースあり:「1 2 3」%n ・半角スペースなし:「123」%n「シングルクォーテーション」や「ダブルクォーテーション」の中に記述すればOKです。%n------------おわり------------'
実行すると以下のように表示されます。
------------FORMATの見本です------------
現在の日時は、西暦2026年(令和08年) 4/10(金) 午後11時45分 6秒です。
1月1日から数えると100日目です。
%の文字は「%%」と記述します。
半角スペースも機能します
・半角スペースあり:「1 2 3」
・半角スペースなし:「123」
「シングルクォーテーション」や「ダブルクォーテーション」の中に記述すればOKです。
------------おわり------------
現在日時を省略して表示しています。上のコードを端末で実行すると、現在日時が反映されて表示されます。
実行例2:-dオプションを使って「1912年3月4日6時58分7秒」の和暦と曜日を調べる例(各フォーマットをクリックすると説明箇所に移動します)
date -d '19120304 6:58:7' '+西暦%C%y年(%EY)%b %e日 %A %r'
(曜日や和暦を調べることが目的の場合、時間の記述は不要です。フォーマットを指定する例として記載しています)実行すると以下のように表示されます。
西暦1912年(明治45年) 3月 4日 月曜日 午前06時58分07秒
1912年が「明治45年」、曜日は「月曜日」が表示されました。(和暦は、1873年「明治」から、現在の「令和」まで反映されます。1872以前の和暦は表示できません)
実行例3:-dオプションを使って「2026年4月10日19時34分56秒」のUNIX時間を調べる例(フォーマットをクリックすると説明箇所に移動します)
date -d '20260410 19:34:56' '+%s'
現在の時間のUNIX時間を調べる場合は、-dオプションを指定せずにdate '+%s'を実行します。実行すると以下のように表示されます。
1775817296
1970年1月1日00:00UTCからの秒数が表示されました。(表示されたUNIX時間を日時に変換するには、date -d '@1775792096'を実行します)
フォーマット一覧
dateマニュアルに記載されているフォーマットが多いため、設定時に調べやすいように分別してまとめてみました。
逆引きは以下から選択してください。
メモ:
- デフォルトでは、日付は数値フィールドに0(ゼロ)を埋め込みます。(例:
%I(%アイ)➡07) - オプションフラグを使うと表示をカスタマイズすることが可能です。
- 以下の「例:
123456…」は、dateコマンドにフォーマットを指定した場合の見え方の見本です。
全体一括できる
%cは、ロケール表示における日時。0で埋める。[+%Y年%m月%d日スペース%X]と同じ(例:2026年04月10日 19時34分56秒)〘%Ecで令和08年…略…〙%xは、ロケール表示における日付。[+%Y年%m月%d日]と同じ(例:2026年04月10日)〘%Exで令和08年…略…〙%Fは、年月日[%+4Y–%m–%d]と同じ(例2026年4月10日:2026-04-10)%Dは、月日年。%m/%d/%yと同じ。(例2026年4月10日:04/10/26)%Xは、ロケール表示における24時間制の時刻(例:19時34分56秒)%rは、ロケール表示における12時間制の時刻(例:午後07時34分56秒)%Tは、24時間制の時刻。%H:%M:%Sと同じ。(例:19:34:56)%Rは、ロケール表示における24時間制の時と分。%H:%Mと同じ。(例:19:34)
年に関する
%Yは、西暦(例:2026)〘%EYで令和08、%+4Y(西暦が4桁を超えると西暦の前に「+プラス記号」がつく)で+12026〙%yは、西暦の下2桁[00~99](例西暦2008年:08)〘%-yで8、%_yで8、%Eyで20(平成20年の「20」に自動計算。%ECと併せて使うか%EYを使うとよい)〙%Cは、世紀(西暦の上2桁(下2桁は省略))(例西暦2026年:20)〘%ECで令和〙%qは、四半期[1~4](例4月:2)〘フラグなし〙%gは、ISO週番号の年の下2桁(%Gを参照)(例西暦2026年:26)%Gは、ISO週番号の年(%Vを参照)通常は%Vと併せて使用。(例西暦2026年:2026)
月に関する
%mは、 月(month)[01〜12](例4月:04)〘%-mで4、%_mで4〙%bは、ロケール表示における月の略称(空白で埋める)(例4月:4月)〘フラグなし〙%Bは、ロケール表示における月の正式名称(左に詰める)(例4月:4月)〘フラグなし〙%hは、%bと同じ(例4月:4月)〘フラグなし〙
日付に関する
曜日に関する
%aは、ロケール表示における曜日の略称(例:日、月、火・・・)(例:金)〘フラグなし〙%Aは、ロケール表示における曜日の正式名称(例:日曜日、月曜日、火曜日・・・)(例:金曜日)〘フラグなし〙%uは、月曜日を週の始まりとする曜日[1(月曜)〜7(日曜)](例:7(日曜日))〘フラグなし〙%wは、日曜日を週の始まりとする曜日[0(日曜)~6(土曜)](例:0(日曜日))〘フラグなし〙
時間に関する
%Hは、24時間制の時間。1桁の時間は0(ゼロ)で埋める[00~23](例3時:03)〘%-Hで3、%_Hは%kと同じで3〙%kは、24時間制の時間。1桁の時間は半角スペースで埋める[ 0〜23]%_Hと同じ。(例4時:4)〘%-kで4、%0kは04〙%I(大文字のアイ)は、12時間制の時間。1桁の時間は0(ゼロ)で埋める[01~12](例7時:07)。〘%-Iで7、%_Iは%lと同じでで7〙%l(小文字のエル)は、12時間制の時間。1桁の時間は半角スペースで埋める[ 1〜12]%_Iと同じ(例7時:7)〘%-lで7〙%pは、ロケール表示におけるAMまたはPMに相当する文字。不明な場合は空白。(例:午後)%Pは、%pを小文字で表示(例:午後)
分に関する
秒に関する
タイムゾーン
%zは、+hhmm形式のタイムゾーン(例:+0900)(例:+0900)%:zは、+hh:mm形式のタイムゾーン(例:+09:00)(例:+09:00)%::zは、+hh:mm:ss形式のタイムゾーン(例:+09:00:00)(例:+09:00:00)%:::zは、必要な精度で「:コロン」付きのタイムゾーンを表示(例:+09、+05:30)(例:+09)%Zは、アルファベットによるタイムゾーンの略語(例:JST)(例:JST)
書式
カウント その他
%jは、年間通算日数。1月1日からの日数[001~366](例1月8日:008)〘%-Sで8、%_Sで8(半角スペース2つ分)〙%sは、UNIX時間(エポック秒:1970年1月1日 00:00 UTCからの秒数)を表示【実行例】%Uは、日曜日を週の始まりとする年間の週番号(年初の日曜日を含む週を第1週とする)[00〜53](例2026年1月4日:01)〘%-Uで1、%_Uで1〙%Wは、月曜日を週の始まりとする年間の週番号(年初の月曜日を含む週を第1週とする)[00〜53](例2026年1月4日:00)〘%-Wで0、%_Wで0〙%Vは、月曜日を週の始まりとするISO週番号(週の始まりは月曜、かつ、年初の木曜日を含む週を第1週とする)[00〜53](例2026年1月4日:01)〘%-Vで1、%_Vで1〙
オプションフラグ
オプションフラグ:「%」の後に続く以下の記号。(指定方法は以下を参照)
%-…(ハイフン)は、フィールドを埋めずに左に詰める(例:%-I(%ハイフンアイ)➡7)%_…(アンダースコア)は、スペースで埋める(例:%_I(%アンダースコアアイ)➡7)%0…(ゼロ)は、0(ゼロ)で埋める(例:%0l(%ゼロエル)➡07)%+…(プラス)は、0(ゼロ)で埋め、4桁を超える将来の年の前に「+」を付ける(例:%+4Y➡2026)%^…(キャレット)は、可能であれば大文字を使う(事例を確認できなかったため、どのような表示になるか不明です)%#…(シャープ)は、可能であれば反対のケースを使う(事例を確認できなかったため、どのような表示になるか不明です)
オプションフラグの指定方法:上記「…」の記述
- .上記「-_0+^#」などのフラグの後に、オプションのフィールド幅を10進数で指定します。(省略可能)(「-ハイフン」のフィールドの入力は無効になります)
- .10進数の後ろにオプションの修飾子を指定します。
まとめ・参考資料
以上で、dateコマンドの使用方法の説明を終わります。さらに詳しい内容を知りたい場合は、以下のコマンドを実行してみてください
dateマニュアル(日本語訳版):man date
dateヘルプ:date --help
date コマンド:https://www.tohoho-web.com/linux/cmd/date.html
date コマンド:https://hydrocul.github.io/wiki/commands/date.html
【Linux】dateコマンドで日付フォーマットの変更及び日付計算の方法:https://qiita.com/setonao/items/85435d5f7c480425ba95

