これは、「週番号」がISO週番号を意味すると仮定して、bashを使用するLinuxで機能します。ISO 週は月曜日から始まり、その週のうち 4 日が年に含まれる場合、その週は 1 年としてカウントされます。
dates_for_week() {
printf "January 1 $1 %+d days\n" {-3..368} |
date +%G%V_%Y-%m-%d -f - |
grep $(printf %d%02d $1 $2) |
cut -c8-
}
編集:これは、同じ結果を得るために少ない作業を行うバージョンです:
dates_for_week () {
printf "$1-01-01 +$2 weeks %+d days\n" {-10..2} |
date +%V_%Y-%m-%d -f - |
grep '^0\?'$2_ |
cut -c4-
}
例えば:
$ dates_for_week 2013 1
2012-12-31
2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05
2013-01-06
$ dates_for_week 2013 46
2013-11-11
2013-11-12
2013-11-13
2013-11-14
2013-11-15
2013-11-16
2013-11-17
$ dates_for_week 2013 52
2013-12-23
2013-12-24
2013-12-25
2013-12-26
2013-12-27
2013-12-28
2013-12-29