Эта команда даты GNU позволяет мне получить миллисекунды следующим образом:
date +%M:%S.%N;
но эта команда не работает на солярисе ... есть идеи?
Эта команда даты GNU позволяет мне получить миллисекунды следующим образом:
date +%M:%S.%N;
но эта команда не работает на солярисе ... есть идеи?
Этот "сценарий оболочки" должен отображать миллисекунды:
#!/bin/ksh
if [ ! -x /var/tmp/time_ms ]
then
cat > /tmp/time_ms.c << %
#include <sys/time.h>
main()
{
struct timeval tv;
gettimeofday(&tv,(void*)0);
printf("%d.%d\n",tv.tv_sec,tv.tv_usec/1000);
}
%
PATH=$PATH:/usr/sfw gcc /tmp/time_ms.c -o /var/tmp/time_ms
fi
/var/tmp/time_ms
Конечно, вы можете переместить time_ms в вашей переменной PATH и вызывать ее сразу после первого запуска. Это обеспечит более быстрое решение, чем gnu date или любой perl/ любой другой скрипт.
Наиболее вероятным объяснением является то, что Solaris не использует дату GNU или не имеет последней версии. В справочной странице Solaris для даты не упоминается опция форматирования %N
Документы GNU coreutils для спецификаторов преобразования времени для date
специально говорят, что %N
является расширением GNU (о, это наносекунды, а не миллисекунды).
Если вам нужны миллисекунды, лучше всего загрузить последние версии GNU coreutils и установить их в /usr/local
(или /opt/local
если вы предпочитаете). Чтобы получить правильную версию date
, вы должны либо сконфигурировать свой PATH
так, чтобы /usr/local/bin
предшествовал /usr/bin
либо использовать полный путь к /usr/local/bin/date
в вашем скрипте.
#!/usr/bin/bash
TSP_MSEC=`perl -MTime::HiRes -e 'print int(1000 * Time::HiRes::gettimeofday),"\n"'`
MSEC=`echo $TSP_MSEC | cut -c11-13`
TSP=`date +%d.%m.20%y" "%H:%M:%S.$MSEC`
echo $TSP
Результат: 15.07.2014 16: 10: 01.260
Perl есть почти везде. Использование:
perl -e 'print time()*1000;print "\n";'
Если вам действительно нужна точность в миллисекундах, попробуйте модуль Time:HiRes
.
[EDIT] В качестве альтернативы, скомпилируйте небольшую программу на C, которая вызывает gettimeofday()
и печатает результат.
Если вы измеряете время, затрачиваемое частью скрипта, вы можете поместить эту часть скрипта в функцию и вызвать time myfunction
. Вы также можете вызвать times
встроенное до и после раздела, который вы хотите рассчитать, но выполнять арифметику самостоятельно - это немного больно.