シェルのdateコマンド(Linux、MacOS/FreeBSD)の演算いろいろ

dateコマンドはLinux系と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の方が便利そうだがバグを生む原因にもなりそう。


関連記事

Comment

(編集・削除用)
管理者にだけ表示を許可

Trackback

URL
https://nosource.blog.fc2.com/tb.php/198-c8c699d7
この記事にトラックバック(FC2Blog User)

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
261位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
47位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm