こんにちは!はづきです
文系から一部上場IT企業に就職し、エンジニアをやっています
今回はLinuxのdateコマンドについての備忘録です
基本の使い方から日時計算を利用した応用操作まで、自分なりにまとめてみました!
※この記事は初心者向けに平易に解説しています。正確な理解をしたい人は専門書・専門家をあたっていただければと思います。また、この記事の情報におけるCPの動作結果については自己責任でお願いします。
※本サイトにはプロモーション・広告が含まれています(はづきのブログより)
dateコマンドは日付や時刻を取得するコマンド
dateコマンドはシステム(狭義ではOS)に設定されている日付や時刻を取得するコマンドです
Linuxで日時情報を使用する処理を実行する際に使用されることがあります。以下では、一番シンプルな実行例を紹介します
■実行例:
hazuki@hazukiBlog:~$ date #実行方法は「date」と入力してEnterキーを押すだけ
Tue Jun 13 03:33:51 JST 2023 #日本標準時(JST)で日時情報が取得された
dateコマンドのオプションについて解説
dateコマンドではいくつかのオプションがあり、必要な日時情報を柔軟に取得することができます
この記事では4つの基本オプションを紹介したうえで、これらを組み合わせた応用操作について解説します
-d:指定した値で日時を取得する(日時計算)
「-d」は、指定値によって過去・未来の任意の日時を取得することができるオプションです
取得したい日時と基準日との差分を指定することで日時情報を取得します。実際に以下で実行例をみてみましょう
■実行例:現在日時との差分で取得する
#現在日時との差分を取得する場合は<基準日>は省略可能
#柔軟に指定することできて表現の仕方が多いので例をたくさん書いときます。
#「-d」は「--date」でもOK
#現在日時の確認(2023/6/13 3:51)
hazuki@hazukiBlog:~$ date
Tue Jun 13 03:51:26 JST 2023
#明日(2023/6/14)の日付情報を取得する場合
hazuki@hazukiBlog:~$ date -d '1day' #基本的な書き方
Wed Jun 14 03:51:33 JST 2023
hazuki@hazukiBlog:~$ date -d '1days' #daysと「s」がついても大丈夫
Wed Jun 14 03:51:37 JST 2023
hazuki@hazukiBlog:~$ date -d 'day' #1日を表すなら「1」は省略可能
Wed Jun 14 03:51:42 JST 2023
hazuki@hazukiBlog:~$ date -d tomorrow #「明日」を意味する英単語でも可能
Wed Jun 14 03:51:46 JST 2023
#昨日(2023/6/12)の日付情報を取得する場合
hazuki@hazukiBlog:~$ date -d '-1day' #基本的な書き方
Mon Jun 12 03:51:52 JST 2023
hazuki@hazukiBlog:~$ date -d '1day ago' #「ago」を付けて表すことが可能
Mon Jun 12 03:51:57 JST 2023
hazuki@hazukiBlog:~$ date -d yesterday #「昨日」を意味する英単語でも可能
Mon Jun 12 03:52:02 JST 2023
#その他の日付情報を取得する場合
hazuki@hazukiBlog:~$ date -d '2day' #2日後の日時情報を取得
Thu Jun 15 03:52:06 JST 2023
hazuki@hazukiBlog:~$ date -d week #1週間後の日時情報を取得('1 week'でも可)
Tue Jun 20 03:52:26 JST 2023
hazuki@hazukiBlog:~$ date -d fortnight #2週間後の日時情報を取得
Tue Jun 27 03:52:34 JST 2023
hazuki@hazukiBlog:~$ date -d '3 month ago' #3ヵ月前の日時情報を取得
Mon Mar 13 04:13:15 JST 2023
hazuki@hazukiBlog:~$ date -d '5 year ago' #5年前の日時情報を取得
Wed Jun 13 04:13:25 JST 2018
hazuki@hazukiBlog:~$ date -d '1 month 1day' #1ヵ月後+1日後
Fri Jul 14 04:14:10 JST 2023
hazuki@hazukiBlog:~$ date -d '1 month 1day ago' #1ヵ月後+1日前
Wed Jul 12 04:14:21 JST 2023
hazuki@hazukiBlog:~$ date -d '1 month ago 1day' #1ヵ月前+1日後
Sun May 14 04:14:35 JST 2023
■実行例:基準日との差分で取得する
#date -d <基準日> <取得したい日時との差分>
hazuki@hazukiBlog:~$ date -d '2023/01/01 01:00:00 1 day' #1日後の日時情報を取得
Mon Jan 2 01:00:00 JST 2023
hazuki@hazukiBlog:~$ date -d '2023/01/01 01:00:00 1 hour' #1時間後の日時情報を取得
Sun Jan 1 02:00:00 JST 2023
hazuki@hazukiBlog:~$ date -d '2023/01/01 01:00:00 1 minute' #1分後の日時情報を取得
Sun Jan 1 01:01:00 JST 2023
hazuki@hazukiBlog:~$ date -d '2023/01/01 01:00:00 1 second' #1秒後の日時情報を取得
Sun Jan 1 01:00:01 JST 2023
■実行例:日付計算の注意点
#月の計算は注意が必要です
hazuki@hazukiBlog:~$ date -d '2023/01/15 1 month' #1/15の翌月は2/15と計算(問題なし)
Wed Feb 15 00:00:00 JST 2023
hazuki@hazukiBlog:~$ date -d '2023/01/31 1 month' #1/31の翌月は2/31と計算(問題あり)
Fri Mar 3 00:00:00 JST 2023 #2/31-2/28=3日分を加味して3/3となる
-s:日時を設定する
「-s」は、使用しているLinux環境の設定日時を変更するコマンドです
設定日時はシステムに関わる重要な情報なので管理者権限(sudo)で実行することが多いです。そのため、実行時にはパスワード入力を求められます
hazuki@hazukiBlog:~$ date #Linuxに設定されている現在日時を取得
Tue Jun 13 05:04:19 JST 2023
hazuki@hazukiBlog:~$ sudo date -s "2025/01/01 01:00:00" #現在日時を設定し直す
[sudo] password for hazuki: #sudoのためパスワードを入力
Wed Jan 1 01:00:00 JST 2025
hazuki@hazukiBlog:~$ date #現在日時が変更されていることを確認
Wed Jan 1 01:00:05 JST 2025
-u:協定世界時(UTC)を取得する
「-u」は、協定世界時(UTC)を取得するコマンドです
※UTC...Coordinated Universal Time
コンピュータをたくさん使用するような大きなシステムでは、全体の時刻を協定世界時に合わせて構築することがあります
hazuki@hazukiBlog:~$ date -u #-uオプションを指定する
Wed Jun 14 13:20:06 UTC 2023 #UTCで表示されていることを確認
+format:指定したフォーマットで日時を取得する
dateコマンドでは自分の指定したフォーマットで日時を取得することができます
よく使うフォーマットを以下の表にまとめたので、実行例を見ながら使い方を確認してみてください
フォーマット | 表示する値 |
%Y | 西暦4桁(1970〜) |
%y | 西暦下2桁(00〜99) |
%m | 月(01〜12) |
%b | Jan~Dec |
%B | January 〜 December |
%d | 日(01〜31) |
%H | 時(00〜23) |
%I | 時(01〜12) |
%M | 分(00〜59) |
%S | 秒(00〜59) |
%s | UTCからの時刻(1970-01-01 00:00:00からの時刻) |
%a | 曜日(Sun, Mon, Tue, Wed, Thu, Fri, Sat) |
%A | 曜日(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday) |
%u | 曜日(1:月曜日 〜 7:日曜日) |
もっとフォーマットの種類を知りたい方は以下も見てみてください!
■実行例:フォーマットの指定
#「date +"<フォーマット>"」で指定します
hazuki@hazukiBlog:~$ date #現在日時の取得
Tue Jun 13 04:26:07 JST 2023
hazuki@hazukiBlog:~$ date +"%Y" #西暦4桁の取得
2023
hazuki@hazukiBlog:~$ date +"%m" #月(2桁)の取得
06
hazuki@hazukiBlog:~$ date +"%d" #日(2桁)の取得
13
hazuki@hazukiBlog:~$ date +"%H" #時(2桁)の取得
04
hazuki@hazukiBlog:~$ date +"%M" #分(2桁)の取得
27
hazuki@hazukiBlog:~$ date +"%A" #曜日の取得
Tuesday
#表示形式を自分で作ることができる
hazuki@hazukiBlog:~$ date +"%Y年%m月%d日%H時%M分 %A"
2023年06月13日04時28分 Tuesday
#-dオプションとフォーマットを組み合わせて使う
hazuki@hazukiBlog:~$ date -d '1 month' +"%Y/%m/%d %H:%M" #1ヵ月後の日時を取得
2023/07/13 04:32
#-uオプションとフォーマットを組み合わせて使う
hazuki@hazukiBlog:~$ date -u +"%Y/%m/%d %H:%M"
2023/06/12 19:32
#オプションとフォーマットの順番は逆でも大丈夫
hazuki@hazukiBlog:~$ date +"%Y/%m/%d %H:%M" -d '1 month'
2023/07/13 04:33
dateコマンドの応用操作
最後にdateコマンドの応用操作として、月初日と月末日の取得方法について紹介します
月初日の求め方
月初日は、フォーマット指定を利用して日にち部分を「01」とすることで取得できます
hazuki@hazukiBlog:~$ date +"%Y/%m/%d" #現在日時を取得
2023/06/13
hazuki@hazukiBlog:~$ date +"%Y/%m/01" #今月の1日を取得する例
2023/06/01
hazuki@hazukiBlog:~$ date -d '1 month' +"%Y/%m/01" #来月の1日を取得する例
2023/07/01
月末日の求め方
次に月末日の取得方法について解説します
おおまかな手順は以下の通りです
- 取得したい月末日の月の初日を取得する
- 1を利用して翌月の初日を取得する
- 2で取得した月日から1日引く
コマンドを入れ子にして実行する場合はバッククォート(``)で囲みます。入れ子を2重、3重にしていく場合はエスケープ文字(\)を使用します
※手順1で初日を取得するのは、翌月計算で誤った計算がされることを防ぐためです。例.1/31の起点として翌月を求めると3/3になったりする(2月は28日までしかないから)。こうなると1月の月末日でなく2月の月末日が求められてしまう
※エスケープ文字はコマンドライン上はバックスラッシュで表現されることがあります
#①今月の初日を取得
#※任意の月を指定したい場合:例.date -d "2023/2/5" +"%Y/%m/01"
hazuki@hazukiBlog:~$ date +"%Y/%m/01"
2023/06/01
#②来月の初日を取得
#date -d "`①` 1 month" +"%Y/%m/01"
hazuki@hazukiBlog:~$ date -d "`date +"%Y/%m/01"` 1 month" +"%Y/%m/01"
2023/07/01
#③月末の取得(来月の初日から1日引く)
#date -d "`②` 1 day ago" +"%Y/%m/01"
#バッククォートを入れ子にする時は、「\`」で表記する
hazuki@hazukiBlog:~$ date -d "`date -d "\`date +"%Y/%m/01"\` 1 month" +"%Y/%m/01"` 1 day ago" +"%Y/%m/%d"
2023/06/30
dateコマンドについてまとめてみました
お役に立てば幸いです。最後まで読んでいただきありがとうございました!
おしまい
コメント