이 date
프로그램을 사용하여 자정 이후의 시간(초)을 어떻게 계산할 수 있습니까?
답변1
경쟁 조건을 피하기 위해 GNU 날짜는 여전히 가정됩니다.
eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"
다음을 사용하여 zsh
내부적으로 이 작업을 수행할 수 있습니다 .
zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))
일광 절약 시간제 스위치가 없는 시간대에서는 편리하게 다음과 같이 할 수 있습니다.
eval "$(date +'h=%H m=%M s=%S')"
echo "$((${h#0} * 3600 + ${m#0} * 60
+ ${s#0}))"
그것이 하는 일은 선행 0을 제거하는 것인데, 이는 , 및 ${X#0}
같은 일부 쉘에서 문제를 일으킵니다 (쉘이 유효하지 않은 8진수라고 불평하는 곳).bash
dash
posh
08
09
답변2
산술 표현식이 필요하지 않으며 일반 날짜만 사용하면 됩니다.
date -d "1970-01-01 UTC $(date +%T)" +%s
답변3
기반으로bash, 자정 이후의 현재 시간을 밀리초 단위로 가져옵니다., GNU 시스템에서는 다음과 같이 수행할 수 있습니다.
$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
답변4
자정부터 몇 초가 지났나요?
Bash(GNU 사용 date
)의 경우 다음은 동일하게 유효한 두 개의 단일 라이너입니다.
echo $(( - $(date -d 0 +%s) + EPOCHSECONDS ))
또는
echo $(( $(date '+%-H *3600 + %-M *60 + %-S') ))
어느 쪽이든 잘 작동할 것입니다.
마찬가지로 자정부터 몇 분 동안 함수를 실행하는 것이 유용하다고 생각합니다.
minutes () { echo $(( $(date '+%-H *60 + %-M') )) ;}