Linux date 명령을 통해 "10분 전을 기준으로 한 지난 월요일"을 얻을 수 있나요?
예를 들어
- 현재 시간: 2016-02-09 00:05:00
- 예상 결과: 2016-02-01 00:00:00
답변1
귀하가 가지고 있고 faketime
귀하의 것이 date
동적으로 연결된 경우:
faketime -f -10m date -d 'last monday' '+%F %T'
사용 ksh93
(내장 명령만 해당):
printf '%(%F %T)T\n' "$(printf '%(%Y.%m.%d)T' '10 minutes ago')-0 last monday"
여기가 마지막이라면일요일마지막 것 대신월요일에, 다음과 같이 할 수 있습니다.
date -d "$(date -d '10 minutes ago' +"%F -%u day")"
아니면 마지막이라면토요일:
date -d "$(date -d '10 minutes ago' +"%F -%w day -1 day")"
하지만 결국월요일에또는 다른 요일에는 산술 연산이 필요합니다.
eval "date -d \"$(date -d '10 minutes ago' +'%F -$(((%u+5)%%7+1)) day')\""
그렇지 않으면 언제든지 다음을 수행할 수 있습니다.
d=$(date -d 'last monday'); sleep 600; printf '%s\n' "$d"
;-)
답변2
2개의 날짜 작업으로 이를 수행할 수 있습니다. 다음은 빠른 bash 쉘 스크립트입니다:
TIME_TEN_MINUTES_AGO=`date -d '-10 min' +%T`
LAST_MON=`date -d 'last-monday' +%Y-%m-%d`
echo "NOW: " `date "+%Y-%m-%d %T"`
echo "Last Mon: " $LAST_MON $TIME_TEN_MINUTES_AGO
이것은 다음을 인쇄합니다:
NOW: 2016-02-12 07:54:27
Last Mon: 2016-02-08 07:44:27
답변3
비슷한 문제가 있었습니다. 날짜가 주어지면 지난 월요일을 찾으세요.
(TV의 방송 날짜로 프로그램의 비디오 파일 이름을 바꾸십시오.
DATE=$(youtube-dl -j $VID | awk -F\" '{print $28}')
)
저는 macOS에서 BSD를 사용하고 date
있으며 GNU도 설치했습니다 date
.
이것이 faketime
이 문제에 대한 가장 간단한 해결책인 것 같습니다.
faketime $DATE date -v-mon +%F
,
faketime $DATE gdate -d last-mon +%F
.
GNU를 사용하면 간단하게 수행할 수 있지만 date
더 복잡합니다.
eval "gdate -d \"$(gdate -d $DATE '+%D $[-%u+1] day')\" +%F"
.
date
지저분해지더라도 BSD만 사용하여 이 작업을 수행 할 수도 있습니다 .
date -j -f "%a %d %b %Y %T %Z" "$(date -j -r \ "$(date -j -f "%Y%m%d" "$DATE" +"%s")" -v-mon)" +"%F"
.
답변4
여기 10분 전이 전날이 되는 문제를 해결하는 작은 스크립트가 있습니다. 나는 그것이 더 우아하게 이루어질 수 있다고 믿습니다.
#!/bin/bash
DAY=`date --date='-10 min' +"%a"`
SEC=`date --date='-10 min' +"%s"`
if [[ "$DAY" == "Mon" ]]; then
DDIF="7"
elif [[ "$DAY" == "Tue" ]]; then
DDIF="1"
elif [[ "$DAY" == "Wed" ]]; then
DDIF="2"
elif [[ "$DAY" == "Thu" ]]; then
DDIF="3"
elif [[ "$DAY" == "Fri" ]]; then
DDIF="4"
elif [[ "$DAY" == "Sat" ]]; then
DDIF="5"
elif [[ "$DAY" == "Sun" ]]; then
DDIF="6"
fi
EPOCH=$(awk "BEGIN {print $SEC-(86400*$DDIF); exit}")
date -d@"$EPOCH"
그것이 하는 일은 10분 전이 무슨 요일인지 알아내는 것입니다. 월요일까지 며칠 남았는지 알아보세요. 그런 다음 해당 일 수에 86400(하루의 초 수)을 곱하고 10분 전을 기준으로 하는 Epoch에서 이를 뺍니다. 마지막으로 epoch 값을 다시 표준 형식으로 변환합니다.
내가 말했듯이 반드시 단순하거나, 한 줄이거나, 우아할 필요는 없습니다.