답변:
여전히 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 진수 것에 대해 불평 경우).
IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
산술 표현식이 필요하지 않습니다. 순수한 날짜 만 사용하십시오.
date -d "1970-01-01 UTC $(date +%T)" +%s
brew install coreutils
및 교체 date
와 함께gdate
bash를 기반으로 , 자정 이후 현재 시간을 밀리 초 단위 로 GNU 시스템에서 다음과 같이 수행 할 수 있습니다.
$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
date -d @$seconds