0

我需要将时间转换为纳秒,bsd date 命令不适合,因为它可以返回的最佳值是秒..date +"%H:%M:%S"返回17:33:07..

似乎 Mac 的 BSD 日期版本和 Linux GNU 版本之间存在差异。最后一个可以返回纳秒。第一个不行。。

我应该使用 python 或 ruby​​ 脚本而不是 shell 吗?还是有另一种解决方案可以让我在 Mac 上获得纳秒?

不事实上不%N

4

3 回答 3

2

OSXdate命令不会执行纳秒,但在 OSX 中,您仍然可以从系统中获取它。

例如,在 C 中,这应该是系统正常运行时间:

#include <inttypes.h>
#include <stdio.h>
#include <stdint.h>

#include <mach/mach_time.h>

int main(void)
{
        uint64_t t = mach_absolute_time();

        // Get ratio between mach_absolute_time units and nanoseconds.
        mach_timebase_info_data_t data;
        mach_timebase_info(&data);

        // Convert to nanoseconds.
        t *= data.numer;
        t /= data.denom;

        printf("%" PRIu64 "\n", t);

        return 0;
}

将其保存为类似的内容uptimens.c,然后make uptimens从您的 shell 运行。

mac:~ ghoti$ ./uptimens
366181198555774
mac:~ ghoti$ 
于 2013-05-09T16:11:52.630 回答
2

我使用是否存在该--version选项的测试来区分 Mac 的代码:

if ! date --version >/dev/null 2>&1; then # Mac
    micro=$(perl -e 'use Time::HiRes qw( gettimeofday ); my ($a, $b) = gettimeofday; print $b;')
else
    micro=$(($(date +%N) / 1000))
fi

不过,最好的精度gettimeofday是微秒。

于 2013-05-09T16:17:16.947 回答
0
$ 日期 +%T.%N
11:05:07.894987100

这为您提供了具有纳秒精度的当前时间。

于 2013-05-09T16:05:45.820 回答