我需要通过日期范围更改一年中的周数,例如
我有 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 是一年中的一周,脚本的输出是日期范围
这将适用于带有 bash 的 linux,假设“周数”是指 ISO 周数。ISO 周从星期一开始,如果一周中有四天在一年中,则一周计为一年的一部分。
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
我喜欢这样的问题。需要 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