LoginSignup
9
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-08-20

指定された日の曜日を取得したい場合、 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))

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

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

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9