Есть ли команда оболочки в Linux, чтобы получить время в миллисекундах?Команда Linux для получения времени в миллисекундах
ответ
date +%s
возвращает количество секунд с момента создания.
date +%s%N
возвращает количество секунд + текущие наносекунды.
Поэтому echo $(($(date +%s%N)/1000000))
является то, что вам нужно
не работает в Mac OS, так как '% N' не поддерживается' date' – yegor256
Вопрос запрашивает команду Linux. Ответ @ alper отлично подходит для команды date с [GNU coreutils] (http://www.gnu.org/software/coreutils/). GNUtize вашего OSX: [Установить и использовать инструменты командной строки GNU в Mac OS X] (http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools- in-mac-os-x /) – caligari
'date +% s% 3N' быстрее (на основе ответа @ michael-defort) – caligari
date +"%T.%N"
возвращает текущее время с наносекунд.date +"%T.%6N"
возвращает текущее время с наносекундами, округленными до первых 6 цифр, что составляет микросекунды.date +"%T.%3N"
возвращает текущее время с наносекундами, округленными до первых трех цифр, что составляет миллисекунды.
В общем, каждое поле формата date
командования может быть предоставлена опция ширины поля.
'% xN': хороший для ширины поля! – fduff
date + "% Y% m% d.% H% M% S% 3N" в течение миллисекунд. –
питон скрипт так:
import time
cur_time = int(time.time()*1000)
нано 10 -9 и милли 10 -3. Следовательно, мы можем использовать первые 3 символа наносекунд, чтобы получить милли:
date +%s%3N
От man date
:
% N наносекунд (000000000..999999999)
% S секунд с 1970-01-01 00:00:00 UTC
Источник: ошибка сервера How do I get current Unix time in milliseconds using bash?.
В OS X, где date
не поддерживает флаг %N
, я рекомендую установить coreutils
с помощью homebrew.
brew install coreutils
Это даст вам доступ к команде под названием gdate
, который будет вести себя, как date
делает на системах Linux.
Для более «родного» опыта, вы всегда можете добавить это к вашему .bash_aliases
alias date='gdate'
затем выполнить
$ date +%s%N
других ответов, вероятно, в большинстве случаев достаточно, но я думал, что я d добавьте мои 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
date
команды вратаря обеспечивают милли секунд на OS X, поэтому используется псевдоним из питона
millis(){ python -c "import time; print(int(time.time()*1000))"; }
ИЛИ
alias millis='python -c "import time; print(int(time.time()*1000))"'
Просто хотел добавить @ ответ 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'
вот как-то портативный хак для Linux для получения времени в миллисекундах :
#!/bin/sh
read up rest </proc/uptime; t1="${up%.*}${up#*.}"
sleep 3 # your command
read up rest </proc/uptime; t2="${up%.*}${up#*.}"
millisec=$((10*(t2-t1)))
echo $millisec
выход:
3010
Это очень дешевая операция, которая работает с внутренними оболочками и procfs
'date +% s.% N' даст вам наносекунды, вы можете работать с этим? – Wrikken
@Wrikken Это не совсем портативно. –
date + "% Y% m% d.% H% M% S% 3N" - Обычно я использую эту команду для получения фульплата и уникального времени до миллисекунды для создания временных имен файлов в сценарии unix bash. Если ваша система не в состоянии справиться с миллисекундами, вы можете перейти на микро- или nano-секунды, используя 3-6 и 9 соответственно. –