를 사용하여 date
요일을 1에서 7 사이의 정수로 변환할 수 있습니다. 예를 들면 다음과 같습니다.
$ date -d "Thursday" +%u
4
하지만 반대로 하고 싶다면 어떻게 해야 할까요? 그것은 마치,
$ date [options] [+format]
Thursday
날짜가 안맞아도 상관없으니 다른 프로그램을 이용하셔도 됩니다. 여기서는 간단하게 설명하세요.
답변1
다음 일요일의 날짜를 얻고, N
일 수를 추가하고, 해당 특정 날짜의 날짜 이름을 인쇄할 수 있습니다.
getdayname () {
nextplus=$(date -d "next Sunday +$1 days")
date -d "${nextplus}" '+%A'
}
getdayname 2
등을 실행합니다 getdayname 7
(가정 gnu date
).
또는 단순히 배열을 사용하고 date
예를 들어 사용하지 마십시오.
getdayname () {
local days=( Sunday Monday Tuesday Wednesday Thursday Friday Saturday )
printf %s\\n ${days[$1]}
}
bash
/를 사용하더라도 (색인으로) ksh
필요합니다 .printf %s\\n "${days[$1-1]}"
다음으로 시작됨0
), 분할+글로브를 방지하려면 따옴표가 필요합니다( 에서도 작동함 yash
).
답변2
don_crissti의 답변에 따르면 그의 첫 번째 답변에서 잘못된 결과가 나왔기 때문에 다음과 같습니다.
getdayname() {
date -d "$(( 7-$(date '+%u')+$1 )) days" '+%A'
}
답변3
POSIXly( -d
표준 date
옵션이 아닙니다. 사용 가능한 경우 구현마다 다른 것을 의미함) 사용자의 로케일에 날짜 이름을 지정하고 일요일은 0 또는 7입니다.
getdayname() (
IFS=';'
set -o noglob
days=$(locale day) || exit
for day do
set -- $days $days
shift "$day" &&
printf '%s\n' "$1"
done
)
예:
$ getdayname 0 4 7
Sunday
Thursday
Sunday
$ LANG=es_VE.UTF-8 getdayname 0 4 7
domingo
jueves
domingo
GNU 또는 busybox date
( -d ...
상대 날짜를 지원하지 않음) 또는 ast-open date
( -d ...
상대 날짜를 지원하지만 GNU와 같은 방식은 아님 date
)을 사용하십시오.
getdayname() (
for day do
date -ud "1970-01-$((day + 11))" +%A
done
)
zsh
외부 요구 사항 없음 :
$ zmodload zsh/langinfo
$ day=0
$ printf '%s\n' $langinfo[DAY_$((day+1))]
Sunday
또는:
$ zmodload zsh/datetime
$ day=0
$ TZ=UTC0 strftime %A $((86400 * (3+day)))
Sunday