自纪元以来的打印时间(以纳秒为单位)

Posted

技术标签:

【中文标题】自纪元以来的打印时间(以纳秒为单位)【英文标题】:Printing Time since Epoch in Nanoseconds 【发布时间】:2017-01-19 05:44:35 【问题描述】:

所以我知道如何以秒为单位打印自纪元以来的时间,显然甚至是毫秒,但是当我尝试以纳秒为单位时,我不断得到一个太小的整数的虚假输出,并且有时打印的数字小于上次运行的数字。

#include <stdio.h>
#include <time.h>

int main (void)

    long int ns;
    struct timespec spec;

    clock_gettime(CLOCK_REALTIME, &spec);
    ns = spec.tv_nsec;;

    printf("Current time: %ld nonoseconds since the Epoch\n", ns);
    return 0;

例如,从 epoch 开始,我得到了 35071471 纳秒。

如果能帮助它正确显示,我们将不胜感激。

【问题讨论】:

【参考方案1】:

纳秒部分只是“小数”部分,您也必须添加秒数。

// otherwise gcc with option -std=c11 complaints
#define _POSIX_C_SOURCE 199309L
#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <inttypes.h>
#define BILLION  1000000000L
int main(void)

  long int ns;
  uint64_t all;
  time_t sec;
  struct timespec spec;

  clock_gettime(CLOCK_REALTIME, &spec);
  sec = spec.tv_sec;
  ns = spec.tv_nsec;

  all = (uint64_t) sec * BILLION + (uint64_t) ns;

  printf("Current time: %" PRIu64  " nanoseconds since the Epoch\n", all);
  return 0;

【讨论】:

还有一件事,是否可以将all 转换为char?当我尝试投射它时,我正在尝试做的事情给我一个分段错误 all 是一个八字节的大整数,也是一个非常大的数字。为什么要将它作为一个小字节的char 我正在尝试建立一条日志消息,其中包含自纪元以来的时间作为消息的一部分。除非我可以 strcpy/strcat 一个uint64_t,否则我需要它作为char,因为它将成为类型为char 的数据结构元素的一部分编辑:我的意思是char *,我需要它是一个字符串 @WolvenOmega 您必须将其转换为字符串。制作一个足够大的缓冲区char buffer[21] = '\0'; 并转换为例如:sprintf(buffer,"%"PRIu64"",all);

以上是关于自纪元以来的打印时间(以纳秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章

如何将纳秒的纪元时间转换为人类可读的?

在 Python 3.6.9 中以纳秒为单位获取 Epoch 时间戳

如何在Linux中从C打印毫秒和纳秒精度的时间差?

C++ chrono 系统时间(以毫秒为单位),时间操作

纳秒分辨率到纳秒纪元的日历时间

以纳秒为单位的快速日期差异不起作用