web-dev-qa-db-ja.com

年の日から年の週を取得します

年の日の場合、Bashを使用して年の週を取得するにはどうすればよいですか?

24
conandor

date コマンドを使用すると、「%V」形式のパラメーターを使用して年の週を表示できます。

/bin/date +%V

「-d」パラメータを使用して、現在の日付の代わりにカスタム日付を解析およびフォーマットするようにdateに指示できます。

/bin/date -d "20100215"

次に、2つのオプションを組み合わせて、カスタム形式をカスタム日付に適用できます。

/bin/date -d "20100215" +%V
42
Massimo

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