我需要将当前时间以毫秒为单位转换为人类可读的时间格式。
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/time.h>
#include <time.h>
int Cnvrt_To_Time_Frmt(char *Epochval)
{
unsigned long epoch = 0;
time_t tt = 0;
char timestamp[64],usec_buf[20];
if (!sscanf(Epochval, "%lu", &epoch))
{
return 1;
}
tt = epoch;
strftime(timestamp, 64, "%c", localtime(&tt));
printf("%s\n",timestamp);
return 0;
}
int main()
{
uint64_t Epoch_time=1468496250207;
char str_ms[256];
sprintf(str_ms, "%llu", (Epoch_time/1000));
Cnvrt_To_Time_Frmt(str_ms);
}
它产生结果:* 2016年7月14日星期四17:07:30 *。
但我需要以毫秒打印结果。如 * 2016年7月14日星期四17:07:30:40 *。(17小时07分钟30秒40毫秒)
怎么可能呢?
5条答案
按热度按时间bq8i3lrv1#
类型
time_t
by its definition不表示毫秒分辨率的时间,函数localtime
返回指向struct tm
的指针,该指针不包括毫秒,function strftime
不用于生成毫秒字符串。如果你需要毫秒级的时间,你可以使用
timeb
stucture及其关联的ftime
function,如果你的工具链支持的话。pw9qyyiw2#
将此用作格式字符串:
XXX
将被原样复制到时间字符串中,然后在main
中,您可以用毫秒计数覆盖X
。然后,重构代码,使除法和余数运算在
Cnvrt_To_Time_Frmt
内部完成。s5a0g9ez3#
你可以使用其他人的建议,他们是相当不错的,或者你可以使自己的结构和一个函数,转换成时间的毫秒,通过使用基本的数学函数。
创建一个包含dayOfWeek,month,dayOfMonth,hour,minute,second,milliSecond,year的结构体。创建一个convertFunction,它将接收一个需要转换为结构体格式的milliSeconds值。也许这不是最好的方法,但是如果你找不到使用现有库的方法,那么创建你自己的库。
vom3gejh4#
......需要以毫秒打印结果。......这怎么可能?
一步一步来
健壮的代码将对每个函数的返回值添加错误检查。
[编辑]显然OP的时间戳的最后3位是分数/ 512。
dtcbnfnu5#
这个示例程序将从系统操作系统中检索当前时间戳,并以人类可读的格式打印出来。它类似于@user:2410359答案,但更简洁一些。
输出示例: