답변:
date
OS X 의 프로그램은 GNU의 coreutils date
프로그램 과 다릅니다 . coreutils (gnu-date 포함)를 설치하면 date
밀리 초를 지원 하는 버전이 제공 됩니다.
원시 OS X 사용자에게는 소스에서 설치하는 것이 번거로울 수 있으므로 Homebrew 를 사용하는 것이 좋습니다 .
Homebrew를 사용하여 이러한 도구를 설치하려면 터미널에서이 oneliner를 실행하십시오.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
이제 Homebrew가 설치되었습니다 (설치 후 설치 프로그램의 제안을 따르는 것이 좋습니다). 이제 우리는를 사용하여 coreutils를 설치할 것 brew
입니다.
brew install coreutils
설치에서 알 수 있듯이 모든 명령은 접두사 'g'(예 : gdate, gcat, gln 등)로 설치되었습니다. 이 명령을 일반 이름과 함께 사용해야하는 경우 "gnubin"디렉토리를 PATH ( ~/.bash_profile
)에 다음과 같이 추가 할 수 있습니다 .
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
당신은 지금 실행할 수 있습니다
gdate +%s.%N
에포크 이후 시간을 밀리 초 단위로 출력합니다.
date
는 date
gdate 대신 GNU 가되었습니다
+%s.%N
으로이 형식은 초를 밀리 초가 아닌 나노초 단위로 줄입니다. brew를 사용하여 install을 설치 한 후 gdate
맨 페이지에서 밀리 초를 사용할 수 있는지 확인했습니다. 그렇지 않습니다. 또한 정밀도를 %N
지정할 수 있다고 말하지는 않았지만 어쨌든 시도했습니다. 나는 초를 밀리 초 정밀도 (예 : 소수점 이하 세 자리)로 낮추는 명령이 gdate +%s.%3N
입니다.
OS X에서는 OS X date +%s
가 date
출력 에서 이보다 더 높은 정밀도를 지원하지 않고 내부 표현에서 지원되지 않는 초과 정밀도는 마이너스 무한대로 잘립니다.
밀리 초 출력을 원할 경우 다음 명령을 사용할 수 있지만 위에서 언급 한 이유로 인해 정밀도를 추가하는 대신 0을 추가하여 출력을 수정하면됩니다. 다음은 필요한 정밀도를 지원하는 시스템에서 올바른 밀리 초를 출력합니다.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
위 명령의 소스 : Unix.SE – Unix epoch 이후 밀리 초를 얻는 방법
OS X에서 올바른 수의 0을 추가하는 명령을 원한다면 다음을 사용할 수 있습니다.
date +%s000
%-N
하지 않으므로 아무 것도하지 않습니다 (쉘 변수 $N
가 설정 되면 문제가 발생할 수 있습니다 ). 사용하십시오 date +%s000
(또는 date +%s.000
소수점을 원할 경우).
date
명령은 %-N
as를 통과 N
하기 때문에 계산을 방해 할 수 있습니다. 설정 N=7000000000000000000
을 시도한 다음 명령을 시도하십시오 ... 실제로는 그렇지 않지만 환경에 의존하지 않는 것으로 안전합니다.
gdate
습니다/usr/local/bin/gdate
.