자정 이후의 시간(초)을 찾는 방법은 무엇입니까?

자정 이후의 시간(초)을 찾는 방법은 무엇입니까?

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진수라고 불평하는 곳).bashdashposh0809

답변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') )) ;}

관련 정보