Edited at

指定された日の曜日を取得する

More than 5 years have passed since last update.

指定された日の曜日を取得したい場合、 gnu 版の date (1) がインストールされている場合は以下のコマンドで取得可能です(0 が日曜日を示す)。

$ date -d YYYYMMDD '+%w'

0

gnu 版の date (1) がインストールされていない場合でも、 FreeBSD 版の date (1) は独自拡張されているので以下のコマンドで取得可能です(0 が日曜日を示す)。

$ date -j YYYYMMDDHHMM '+%w'

0

但しどちらも posix に準拠していない独自拡張な機能を利用しているため環境依存となってしまうので、 環境に依存しない方法での解決方法を考えてみました。

日付から曜日を取得するためには ツェラーの公式 という計算式があるので、 posix に準拠したシェルの機能だけでその計算式を実装してみます。

$ y=YYYY; m=MM; d=DD

$ test $m -lt 3 && y=$(($y - 1)) && m=$(($m + 12))
$ echo $(($(($y + $y/4 - $y/100 + $y/400 + $(($((13 * $m + 8))/5)) + $d)) % 7))

年と月の値によって調整が必要なのでワンライナーにはならないのが残念ですが、基本的には単純な四則演算なのでシェルの機能のみで実装が可能です。

これで環境に依存せずに任意の日付の曜日が簡単に取得できます。