来自 solaris 命令行的毫秒数

来自 solaris 命令行的毫秒数

这个 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,您可以配置前面的PATHso或在脚本中使用 的完整路径。/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 程序。

相关内容