这个 gnu date 命令让我以这种方式获取毫秒:
date +%M:%S.%N;
但是这个命令在 solaris 上不起作用...有什么想法吗?
答案1
这个“shell 脚本”应该显示毫秒:
#!/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
当然,您可以在 PATH 中重新定位 time_ms,并在第一次运行后直接调用它。这将提供比 gnu date 或任何 perl/whatever 脚本更快的解决方案。
答案2
最可能的解释是 Solaris 不使用 GNU 日期或没有最新版本。Solaris 手册页中的日期没有提到%N
格式化选项。GNU coreutils 文档时间转换说明符具体来说date
,这%N
是一个 GNU 扩展(哦——它是纳秒,而不是毫秒)。
如果你需要几毫秒的时间,最好的办法是下载最新的GNU 核心实用程序并将其安装在/usr/local
(或/opt/local
如果您愿意的话)。要获取 的正确版本date
,您可以配置前面的PATH
so或在脚本中使用 的完整路径。/usr/local/bin
/usr/bin
/usr/local/bin/date
答案3
如果你要测量脚本某部分所用的时间,可以将脚本的这一部分放在函数中并调用time myfunction
。你也可以times
在要计时的部分之前和之后调用内置函数,但自己做算术有点麻烦。
答案4
Perl 几乎无处不在。使用:
perl -e 'print time()*1000;print "\n";'
如果你真的需要毫秒级的精度,可以尝试Time:HiRes
模块。
gettimeofday()
[编辑] 或者,编译一个调用并打印结果的小型 C 程序。