Как узнать время с начала эпохи в миллисекундах в терминале OSX?
Эквивалент Linux / Ubuntu date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Который не работает в моем терминале OSX:
OSX $ date +%s.%N
1403377800.N
Как узнать время с начала эпохи в миллисекундах в терминале OSX?
Эквивалент Linux / Ubuntu date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Который не работает в моем терминале OSX:
OSX $ date +%s.%N
1403377800.N
Ответы:
date
Программы в OS X отличается от 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
становится GNU date
(вместо gdate)
+%s.%N
формат дает секунды с точностью до наносекунды, а не миллисекунды. После того, как я использовал brew для установки gdate
, я проверил страницу руководства, чтобы узнать, доступны ли миллисекунды. Это не. Также не сказано, что %N
можно указать точность for , но я все равно попробовал. Я обнаружил, что команда для получения секунд с точностью до миллисекунды (то есть, три знака после запятой) есть gdate +%s.%3N
.
В OS X просто запуск, так date +%s
как OS X не поддерживает больше точности, чем это в date
выходных данных, и любая избыточная точность, не поддерживаемая внутренним представлением, усекается до минус бесконечности.
Если вы хотите вывод в миллисекундах, вы можете использовать следующую команду, хотя вывод просто исправляется добавлением нулей, а не добавлением точности по вышеуказанной причине. Следующее действительно выводит правильные миллисекунды в системах, которые поддерживают необходимую точность.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Источник для вышеуказанной команды: Unix.SE - Как получить миллисекунды с эпохи Unix
Если вы просто хотите команду, которая добавляет правильное количество нулей в OS X, вы можете использовать:
date +%s000
%-N
, так что ничего не делает (и может вызвать проблемы, если установлена переменная оболочки $N
). Просто используйте date +%s000
(или, date +%s.000
если вы хотите десятичную точку).
date
команда OS X просто проходит %-N
через as N
, это может помешать вычислению. Попробуйте установить N=7000000000000000000
, затем попробуйте команду ... На практике это маловероятно, но я чувствую себя безопаснее с чем-то, что не зависит от окружающей среды.
это решение работает на macOS.
если вы планируете использовать bash-скрипт и имеете Python, вы можете использовать этот код:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Или напишите python
скрипт напрямую:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
был установлен в/usr/local/bin/gdate
.