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