【问题标题】:Using SHELL BSD "date" command for conversion to Nanoseconds?使用 SHELL BSD“日期”命令转换为纳秒?
【发布时间】:2013-05-09 15:41:11
【问题描述】:

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

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

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

事实上没有%N

【问题讨论】:

  • date --v 查看您使用的版本
  • 这就是问题mac使用不支持+"%N"的bsd版本的日期。此外,如果您在 Mac 上搜索手册页,您将找不到 %N 那里的任何地方
  • 这样的解决方案?
  • @ozama 您可能希望使用此信息更新您的帖子。

标签: macos shell unix


【解决方案1】:

OSX date 命令不会执行纳秒,但在 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$ 

【讨论】:

  • 太棒了!你能添加一个看起来像 H:M:S.N 的输入参数,它将被转换为 Linux 时间吗?我不是 c 人:\
  • “Linux 时代”到底是什么意思?您到底在寻找什么——当前时间,还是希望能够使用像 Linux 的 date -d ... 这样的文本解释来调整它?如果是后者,你可能不走运。事实上,告诉我们您在这里想要实现的目标可能对您很有价值。这可能只是一个XY Problem
  • 是的,它可能是;实际上我想从双方剪切一个 mp3 文件让我们说 t1 和 t2 .. 似乎我可以使用ffmpeg -ss t1 -t t2 来做。但是我需要一个脚本来应用到许多长度非恒定的文件,所以我使用一些“sed”来获取文件长度,然后我在微秒内做一个减号......我在这里,我可以'无法以毫秒为单位获得足够的精度..您有更好的主意吗?
【解决方案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 的最佳精度是微秒。

【讨论】:

    【解决方案3】:
    $ 日期 +%T.%N 11:05:07.894987100

    这会以纳秒的精度为您提供当前时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2017-06-19
      相关资源
      最近更新 更多