[unix] 자정 이후 초를 어떻게 찾습니까?

date프로그램을 사용하여 자정 이후의 시간 (초)을 어떻게 계산할 수 있습니까?



답변

여전히 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))

일광 절약 스위치가없는 시간대에서는 다음을 수행 할 수 있습니다.

IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"

${X#0}선도 일부 껍질처럼 0 제거하는 것입니다 bash, dash그리고 posh함께 문제를 일으킬 09(쉘이 잘못된 8 진수 것에 대해 불평 경우).


답변

산술 표현식이 필요하지 않습니다. 순수한 날짜 만 사용하십시오.

date -d "1970-01-01 UTC $(date +%T)" +%s


답변

bash를 기반으로 , 자정 이후 현재 시간을 밀리 초 단위 로 GNU 시스템에서 다음과 같이 수행 할 수 있습니다.

$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983


답변