hel*_*ish 8 unix bash date sh unix-timestamp
我有从大日志文件中提取的周数列表,它们是使用语法提取的:
$ date --date="Wed Mar 20 10:19:56 2012" +%W;
12
Run Code Online (Sandbox Code Playgroud)
我想创建一个简单的bash函数,它可以将这些周数转换为日期范围.我想函数应该接受2个参数:$ number和$ year,例如:
$ week() { ......... }
$ number=12; year=2012
$ week $number $year
"Mon Mar 19 2012" - "Sun Mar 25 2012"
Run Code Online (Sandbox Code Playgroud)
pyn*_*exj 10
用GNU date:
$ cat weekof.sh
function weekof()
{
local week=$1 year=$2
local week_num_of_Jan_1 week_day_of_Jan_1
local first_Mon
local date_fmt="+%a %b %d %Y"
local mon sun
week_num_of_Jan_1=$(date -d $year-01-01 +%W)
week_day_of_Jan_1=$(date -d $year-01-01 +%u)
if ((week_num_of_Jan_1)); then
first_Mon=$year-01-01
else
first_Mon=$year-01-$((01 + (7 - week_day_of_Jan_1 + 1) ))
fi
mon=$(date -d "$first_Mon +$((week - 1)) week" "$date_fmt")
sun=$(date -d "$first_Mon +$((week - 1)) week + 6 day" "$date_fmt")
echo "\"$mon\" - \"$sun\""
}
weekof $1 $2
$ bash weekof.sh 12 2012
"Mon Mar 19 2012" - "Sun Mar 25 2012"
$ bash weekof.sh 1 2018
"Mon Jan 01 2018" - "Sun Jan 07 2018"
$
Run Code Online (Sandbox Code Playgroud)
星期一是一周的第一天,ISO 周数:
function week2date () {
local year=$1
local week=$2
local dayofweek=$3
date -d "$year-01-01 +$(( $week * 7 + 1 - $(date -d "$year-01-04" +%u ) - 3 )) days -2 days + $dayofweek days" +"%Y-%m-%d"
}
week2date 2017 35 1
week2date 2017 35 7
Run Code Online (Sandbox Code Playgroud)
输出:
2017-08-28
2017-09-03
Run Code Online (Sandbox Code Playgroud)