我需要将时间转换为纳秒,bsd date 命令不适合,因为它可以返回的最佳值是秒..date +"%H:%M:%S"
返回17:33:07
..
似乎 Mac 的 BSD 日期版本和 Linux GNU 版本之间存在差异。最后一个可以返回纳秒。第一个不行。。
我应该使用 python 或 ruby 脚本而不是 shell 吗?还是有另一种解决方案可以让我在 Mac 上获得纳秒?
不事实上不%N
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$
我使用是否存在该--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
是微秒。
$ 日期 +%T.%N 11:05:07.894987100
这为您提供了具有纳秒精度的当前时间。