シェルのdateコマンド(Linux、MacOS/FreeBSD)の演算いろいろ
- Fri
- 23:09
- シェルスクリプト
dateコマンドはLinux系とMacOS/FreeBSD系でパラメータが全然違うのでよく使うものをまとめ。追々追記。
Linux
-j : 任意日付の指定ありの場合、-jオプションをつける
-f : 入力日付のフォーマット
最後の"+〜"は、出力フォーマット
Linux
Linux(GNU coreutils)のdateコマンドは入力日付のフォーマットを勝手に解釈してくれて便利。
"+〜"は、出力フォーマット。位置は、前でも後ろでもOK。MacOSだと最後に指定しないとエラーになる。
-v : 日(d)/月(m)など複数指定可能
複数指定した場合は、最初のパラメータから計算されていくので、「-v-1d -v-1m 」と「-v-1m -v-1d」では結果が異なる。
Linux
-d にそのまま続けて加減算の日/月を指定
減算の場合は、「1 day ago」とか「1 month ago」とか。MacOSの場合と違って順番は関係ない様子。
日付の計算(加減算)を行う場合、どちらが便利なのかは微妙な感じがする。MacOS/FreeBSDの方が便利そうだがバグを生む原因にもなりそう。
dateコマンドのバージョン
MacOS$ uname -a Darwin MacbookM1 Darwin Kernel Version 20.3.0: Thu Jan 21 00:06:51 PST 2021; root:xnu-7195.81.3~1/RELEASE_ARM64_T8101 arm64 $ man date | tail -3 A date command appeared in Version 1 AT&T UNIX. BSD May 7, 2015 BSD
Linux
$ uname -a Linux XXX 4.14.94-164.ELK.el6.x86_64 #1 SMP Wed Jan 16 16:56:35 CST 2019 x86_64 x86_64 x86_64 GNU/Linux $ date --version date (GNU coreutils) 8.4 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later
任意日付の指定方法
MacOS-j : 任意日付の指定ありの場合、-jオプションをつける
-f : 入力日付のフォーマット
最後の"+〜"は、出力フォーマット
$ date -jf "%Y-%m-%d" 2021-03-01 "+%Y%m%d" 20210301フォーマットが一致しないとエラーとなる
$ date -jf "%Y-%m-%d" 2021/03/01 "+%Y%m%d" Failed conversion of ``2021/03/01'' using format ``%Y-%m-%d'' date: illegal time format
Linux
Linux(GNU coreutils)のdateコマンドは入力日付のフォーマットを勝手に解釈してくれて便利。
"+〜"は、出力フォーマット。位置は、前でも後ろでもOK。MacOSだと最後に指定しないとエラーになる。
$ date "+%Y-%m-%d" "-d 20210301" 2021-03-01 $ date "+%Y-%m-%d" "-d 2021-03-01" 2021-03-01 $ date "+%Y-%m-%d" "-d 2021/03/01" 2021-03-01 $ date "-d 20210301" "+%Y-%m-%d" 2021-03-01
日付の演算(加算・減算)、前日・翌日の取得
MacOS-v : 日(d)/月(m)など複数指定可能
複数指定した場合は、最初のパラメータから計算されていくので、「-v-1d -v-1m 」と「-v-1m -v-1d」では結果が異なる。
前日(−1)を取得 $ date -v-1d -jf "%Y-%m-%d" 2021-03-01 "+%Y%m%d" 20210228 1日前のさらに1か月前を取得 $ date -v-1d -v-1m -jf "%Y-%m-%d" 2021-03-01 "+%Y%m%d" 20210128 1か月前の1日前を取得 $ date -v-1m -v-1d -jf "%Y-%m-%d" 2021-03-01 "+%Y%m%d" 20210131
Linux
-d にそのまま続けて加減算の日/月を指定
減算の場合は、「1 day ago」とか「1 month ago」とか。MacOSの場合と違って順番は関係ない様子。
$ date "+%Y-%m-%d" "-d 20210301 1 month ago 1 day ago" 2021-01-31 $ date "+%Y-%m-%d" "-d 20210301 1 day ago 1 month ago" 2021-01-31
日付の計算(加減算)を行う場合、どちらが便利なのかは微妙な感じがする。MacOS/FreeBSDの方が便利そうだがバグを生む原因にもなりそう。
- 関連記事
-
- シェルのdateコマンド(Linux、MacOS/FreeBSD)の演算いろいろ
- bashでforループ
- lftpコマンドによるsftpサーバへのアクセス
- makeからシェルコマンドを実行して結果を変数に取得
- lftpコマンドによるFTPSサーバへのアクセス
Comment
Trackback
- URL
- https://nosource.blog.fc2.com/tb.php/198-c8c699d7
- この記事にトラックバック(FC2Blog User)