1

たとえば、日付の範囲で1年の週数を変更する必要があります

2013 年の週番号は 46 です

日付の範囲は次のとおりです。

2013-11-11
2013-11-12
2013-11-13
2013-11-14
2013-11-15
2013-11-16
2013-11-17

bashでできるかわかりません

番号は、たとえば、スクリプトが使用する convertir.sh を呼び出す場合のスクリプトのパラメーターです。

convertir.sh 2013 46

ここで、2013 は年、46 は週で、スクリプトの出力は日付の範囲です。

4

2 に答える 2

5

これは、「週番号」が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
于 2013-05-30T20:21:28.347 に答える
0

このような質問が大好きです。GNU 日付が必要です:

function mondayOfWeek1 {
    local year=$1 weeknum dayofweek adj=0
    # iso week num and day of week
    read weeknum dayofweek < <(date -d "$year-01-01" +"%V %w")
    # adjust based on wk num
    (( weeknum != 1 && $dayofweek >= 1)) && (( adj += 7 ))
    # adjust based on day of week
    (( adj += 1 - dayofweek ))
    date -d "$year-01-01 + $adj days" +"%Y-%m-%d"
}

function mondayOfWeek {
    local week=$1
    local year=${2-$(date +%Y)}
    date -d "$(mondayOfWeek1 $year) + $((week - 1)) weeks" +"%Y-%m-%d"
}


monday=$(mondayOfWeek 46)
for day in {0..6}; do 
    date -d "$monday + $day days" +"%Y-%m-%d"
done
于 2013-05-30T20:19:55.437 に答える