Команда 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'