如何在FreeBSD中获取毫秒级时间?

10

在Linux中,我可以使用以下命令以毫秒为单位查找当前时间:

date +%s%N

但在FreeBSD上我只得到

[13:38 ]#date +%s%N
1299148740N

我该如何在FreeBSD中获取毫秒(或纳秒)级别的时间?


输出毫秒级时间戳:echo $((\date +%s`*1000)),如果需要纳秒级时间戳,请使用 *1000000000`。 - Eelvex
我不想添加零,我想知道确切的毫秒数。也许,PERL上有解决方案吗? - ilalex
5个回答

6
BSD的date命令不支持毫秒。如果您需要支持毫秒的date,请安装GNU的coreutils软件包。
我在OS X上遇到了这个问题,因为它的date来自BSD。解决方法是brew install coreutilsln -sf /usr/local/bin/gdate $HOME/bin,并确保$HOME/binPATH中排在第一位。

3
例如,使用gettimeofday()函数:
#include <stdio.h>
#include <sys/time.h>
int main(void)
{
  struct timeval time_now;
    gettimeofday(&time_now,NULL);
    printf ("%ld secs, %ld usecs\n",time_now.tv_sec,time_now.tv_usec);

    return 0;
}

4
这是一个关于Shell的问题,而不是C语言的问题。 - Keith Tyler

0

这是一个适用于任何最新版本的Perl的一行代码:

perl -MTime::HiRes=gettimeofday -MPOSIX=strftime -e '($s,$us) = gettimeofday(); printf "%d.%06d\n", $s, $us'
1487594425.611120

(修改自这个答案,针对类似问题)


0

尝试使用tai64n来自daemontools

$ echo | tai64n | tai64nlocal
2011-03-03 09:45:37.833010500

$ ps | tai64n | tai64nlocal
2011-03-03 09:52:30.817146500   PID TTY          TIME CMD
2011-03-03 09:52:30.817150500  7154 pts/1    00:00:07 bash
2011-03-03 09:52:30.817157500 20099 pts/1    00:00:00 ps
2011-03-03 09:52:30.817159500 20100 pts/1    00:00:00 tai64n
2011-03-03 09:52:30.817162500 20101 pts/1    00:00:00 tai64nlocal

-1

获取毫秒的另一种方法是使用Python:

time_ms=$( python3 -c'import time; print(time.time())' )
echo $time_ms

输出:

1570807434.2774572

请注意,Python 2.x 只返回秒的百分之一。如果您的操作系统仅使用 Python 2.x,则可能需要进行微调以获得更多细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接