Время печати начиная с эпохи в наносекундах


Таким образом, я знаю, как печатать время с эпохи в секундах и, очевидно, даже в миллисекундах, но когда я пробую наносекунды, я продолжаю получать поддельный вывод целого числа, которое слишком мало, и оно иногда печатает числа меньше, чем последний прогон.

#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 Epochn", ns);
    return 0;
}

Например, с пробегом от этого я получил 35071471 наносекунд с момента epoch.

Была бы признательна любая помощь в правильном отображении этого.

1 3

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;
}