年の日の場合、Bashを使用して年の週を取得するにはどうすればよいですか?
date
コマンドを使用すると、「%V」形式のパラメーターを使用して年の週を表示できます。
/bin/date +%V
「-d」パラメータを使用して、現在の日付の代わりにカスタム日付を解析およびフォーマットするようにdate
に指示できます。
/bin/date -d "20100215"
次に、2つのオプションを組み合わせて、カスタム形式をカスタム日付に適用できます。
/bin/date -d "20100215" +%V
GNU date
を使用している場合は、次のような相対的な日付を使用できます。
$ doy=193
$ date -d "Jan 1 +$((doy -1)) days" +%U
28
これにより、非常に単純な答えが得られますが、date
に依存しません。
$ echo $((doy / 7))
曜日には注意を払いません。
週の記数法のデモンストレーションは次のとおりです。
$ printf "\nDate\t\tDOW\tDOY\t%%U %%V %%W\n"; \
for d in "Jan "{1..4}" 2010" \
"Dec "{25..31}" 2010" \
"Jan "{1..4}" 2011"; \
do printf "%s\t" "$d"; \
date -d "$d" +"%a%t%j%t%U %V %W"; \
done
Date DOW DOY %U %V %W
Jan 1 2010 Fri 001 00 53 00
Jan 2 2010 Sat 002 00 53 00
Jan 3 2010 Sun 003 01 53 00
Jan 4 2010 Mon 004 01 01 01
Dec 25 2010 Sat 359 51 51 51
Dec 26 2010 Sun 360 52 51 51
Dec 27 2010 Mon 361 52 52 52
Dec 28 2010 Tue 362 52 52 52
Dec 29 2010 Wed 363 52 52 52
Dec 30 2010 Thu 364 52 52 52
Dec 31 2010 Fri 365 52 52 52
Jan 1 2011 Sat 001 00 52 00
Jan 2 2011 Sun 002 01 52 00
Jan 3 2011 Mon 003 01 01 01
Jan 4 2011 Tue 004 01 01 01