我需要知道当前使用Cygwin bash的第一个星期一。
答案 0 :(得分:1)
这应该这样做,但我这里没有Cygwin来测试:
#!/bin/bash
# get current year and month:
year=$( date +"%Y" )
month=$( date +"%m" )
# for the first 7 days in current month :
for i in {1..7}
do
# get day of week (dow) for that date:
dow=$( date -d "${year}-${month}-${i}" +"%u" )" "
# if dow is 1 (Monday):
if [ "$dow" -eq 1 ]
then
# print date of that Monday in default formatting:
date -d "${year}-${month}-${i}"
break
fi
done
有关详细信息,请参阅联系手册date(1)
。
答案 1 :(得分:1)
单行 - 我希望这是正确的
d = $(日期-d date +%Y%m"01"
+%u);日期-d date +%Y%m"0"$(((9-$d)%7))
变量d
包含星期几(1..7),其中1是星期一
然后我打印当前年份和月份,用$((9-$d))
答案 2 :(得分:0)
d=$(date -d "today 1300" '+%Y%m01'); w=$(date -d $d '+%w'); i=$(( (8 - $w) % 7)); answer=$(( $d + $i ));
结果存储在$answer
中。它使用工作变量$d
,$w
和$i
。
echo $answer; echo $(date -d $answer '+%w')
预期结果:当月的星期一,格式为YYYYMMDD。在下一行,星期几为1。
for x in {1..100}; do d=$(date -d "+$x months 1300" '+%Y%m01'); w=$(date -d $d '+%w'); i=$(( (8 - $w) % 7)); answer=$(( $d + $i )); echo $answer; echo $(date -d $answer '+%w'); done | egrep -B1 '^[^1]$'
预期结果:没有
(如果有结果,则有问题)
第一条语句获取当月的第一天,并将其存储在$d
中,格式为YYYYMMDD。
第二条语句获取日期$d
的星期几,并将其存储在$w
中。
第三条语句计算要添加的天数增量,并将其存储在$i
中。零在这里是完全有效的,因为...
最后一条语句计算日期$d
(作为整数)和增量$i
(作为整数)的和。之所以可行,是因为$i
的域是0到6,我们总是从每月的第一天开始。可以快速将其转换回日期变量(例如,参见证明)。
已在BASH v4.1(CentOS 6),v4.4(Ubuntu)和v5(Archlinux)上进行了测试