$ SAT=$(date -dsaturday +%Y-%m-%d)
$ SUN=$(date -dsunday +%Y-%m-%d)
$
$ echo $SAT
2016-04-09
$ echo $SUN
2016-04-10
$
나는 토요일과 일요일의 다음 날짜를 나열하는 방법을 알고 있습니다.
다음 6개월 동안 다음 토요일과 일요일을 모두 나열하는 방법은 무엇입니까?
우분투에서 bash를 사용하고 있습니다.
답변1
토요일 및/또는 일요일의 초기 시작 날짜를 결정한 후에는 상대 날짜를 사용하는 bash 스크립트의 루프를 사용하여 이를 수행할 수 있습니다.
#!/bin/bash
SAT=$(date -dsaturday +%Y-%m-%d)
SUN=$(date -dsunday +%Y-%m-%d)
# 365 days/year / 2 ~= 182 days
ENDSAT=$(date -d "$SAT + 182 days" +"%Y-%m-%d")
ENDSUN=$(date -d "$SUN + 182 days" +"%Y-%m-%d")
echo $SAT
echo $SUN
until [ "$SUN" == "$ENDSUN" ]; do
SAT=$(date -d "$SAT + 7 days" +%Y-%m-%d)
SUN=$(date -d "$SUN + 7 days" +%Y-%m-%d)
echo $SAT
echo $SUN
done
초기 설정에서는 "+ 6개월"을 사용하지 않습니다. 왜냐하면 달마다 일수가 다르기 때문에 작업일이 약간 달라질 수 있기 때문입니다.
답변2
사람이 읽을 수 있는 형식으로 주말을 표시하는 가장 간단한 방법은 다음과 같습니다.
cal -A6
이것은 다음을 인쇄합니다칼잉달:
2016
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 7 1 2 3 4
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
31
October
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
목록이 필요한 경우오직토요일과 일요일:
nextsat="$(date -d "next sat" +%Y-%m-%d)"
for i in {0..26}; do
date -d "$nextsat +$((i*7)) day" +%a-%Y-%m-%d
date -d "$nextsat +$((i*7+1)) day" +%a-%Y-%m-%d
done
6개월(반년)의 범위는 (대략) ~182일이나, 특별한 사정이 없는 한 26주입니다. 그렇기 때문에 {0..26}
. 이번주는 26주 남은 0주차입니다. 엄격히 26주가 필요한 경우 {0..25}를 사용하세요.
답변3
#!/bin/bash
WEEK=0
END_MONTH=$((`date -d "6 months" +%m` + 1)) |sed 's/^0//'
while true; do
CURRENT_MONTH=`date -d "$WEEK weeks" +%m`|sed 's/^0//'
if [[ $CURRENT_MONTH -ne $END_MONTH ]]; then
date -d "$WEEK weeks saturday" +%Y-%m-%d
date -d "$WEEK weeks sunday" +%Y-%m-%d
else
#$END_MONTH reached... exiting
exit 0
fi
let "WEEK++"
done