Есть ли команда оболочки в Linux, чтобы получить время в миллисекундах?
Команда Linux, чтобы получить время в миллисекундах
Ответ 1
date +%s
возвращает число секунд с эпохи.
date +%s%N
возвращает количество секунд + текущие наносекунды.
Следовательно, echo $(($(date +%s%N)/1000000))
- это то, что вам нужно
Ответ 2
-
date +"%T.%N"
возвращает текущее время с наносекундами. -
date +"%T.%6N"
возвращает текущее время с наносекундами, округленными до первых 6 цифр, что составляет микросекунды. -
date +"%T.%3N"
возвращает текущее время с наносекундами, округленными до первых трех цифр, что составляет миллисекунды.
В общем, каждому полю формата команды date
может быть задана дополнительная ширина поля.
Ответ 3
nano составляет 10 -9 и милли 10 -3. Следовательно, мы можем использовать 3 первых символа наносекунд, чтобы получить милли:
date +%s%3N
От man date
:
% N наносекунды (000000000..999999999)
% s секунд с 1970-01-01 00:00:00 UTC
Источник: ошибка сервера Как получить текущее время Unix в миллисекундах с помощью bash?.
Ответ 4
В OS X, где date
не поддерживает флаг %N
, я рекомендую установить coreutils
с помощью homebrew.
brew install coreutils
Это даст вам доступ к команде под названием gdate
, которая будет вести себя как date
в системах Linux.
Для более "родного" опыта вы всегда можете добавить это в свой .bash_aliases
alias date='gdate'
затем выполните
$ date +%s%N
Ответ 5
Другие ответы, вероятно, достаточны в большинстве случаев, но я думал, что добавлю свои 2 цента, когда столкнулся с проблемой в системе busybox.
Данная система не поддерживает формат формата %N
и не имеет интерпретатора python
или perl
.
После большой царапины головы мы (спасибо Дейву!) пришли к следующему:
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
Он извлекает секунды и микросекунды с выхода adjtimex
(обычно используется для установки параметров для системных часов) и печатает их без новых строк (чтобы они склеивались). Обратите внимание, что поле микросекунд должно быть предварительно заполнено нулями, но это никак не влияет на поле секунд, которое больше 6 цифр. Из этого следует тривиально преобразовать микросекунды в миллисекунды.
Если вам нужна новая новая строка (возможно, потому, что она выглядит лучше), попробуйте
adjtimex | awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }' && printf "\n"
Также обратите внимание, что для этого требуется adjtimex
и awk
. Если нет, то с помощью busybox вы можете указать их локально с помощью
ln -s /bin/busybox ./adjtimex
ln -s /bin/busybox ./awk
И затем вызовите вышеуказанное как
./adjtimex | ./awk '/(time.tv_sec|time.tv_usec):/ { printf("%06d", $2) }'
Или, конечно, вы можете поместить их в свой PATH
EDIT:
Вышеописанное работает на моем устройстве busybox. На Ubuntu я попробовал то же самое и понял, что adjtimex
имеет разные версии. На Ubuntu это работало для вывода времени в секундах с десятичными знаками на микросекунды (включая завершающую новую строку)
sudo apt-get install adjtimex
adjtimex -p | awk '/raw time:/ { print $6 }'
Я бы этого не сделал на Ubuntu. Я бы использовал date +%s%N
Ответ 6
date
команда не выдавала миллисекунды на OS X, поэтому использовала псевдоним из python
millis(){ python -c "import time; print(int(time.time()*1000))"; }
ИЛИ
alias millis='python -c "import time; print(int(time.time()*1000))"'
Ответ 7
python script следующим образом:
import time
cur_time = int(time.time()*1000)
Ответ 8
Просто хотел добавить к @Alper ответ, что я должен был сделать, чтобы заставить этот материал работать:
На Mac вам понадобится brew install coreutils
, чтобы мы могли использовать gdate
. В противном случае в Linux это просто date
. И эта функция поможет вам командам времени без создания временных файлов или чего-либо:
function timeit() {
start=`gdate +%s%N`
bash -c $1
end=`gdate +%s%N`
runtime=$(((end-start)/1000000000.0))
echo " seconds"
}
И вы можете использовать его со строкой timeit 'tsc --noEmit'