我需要将时间转换为纳秒,bsd date命令不合适,因为它可以返回的最佳值是秒。date +"%H:%M:%S"
返回17:33:07
..
似乎Mac的BSD日期版本和Linux GNU日期版本之间存在差异。最后一个可以返回纳秒。第一个可以......
我应该使用python或ruby脚本而不是shell吗?或者是否有其他解决方案可以在Mac上获得纳秒数?
实际上没有%N
答案 0 :(得分:2)
OSX date
命令不会执行nanonseconds,但在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
的内容,然后从您的shell运行make uptimens
。
mac:~ ghoti$ ./uptimens
366181198555774
mac:~ ghoti$
答案 1 :(得分:1)
我使用--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
的最佳准确度是微秒。