我有一个long,它有UTC格式的时间作为某些数据的时间戳,现在我想将它转换为这种格式: 第1-12个月 第1-31天 24小时格式0-23 分0-59 第二次0-59 亚秒纳秒0-999,999,999
现在纳秒显然可以设置为0,因为它不需要那么准确。
这样做的最佳方法是什么?我已经看到大量的例子,但它们令人困惑,似乎无法转换任意日期,它们只能用于转换当时的确切时间。
答案 0 :(得分:0)
答案 1 :(得分:0)
你走了。注意注释行
#include <stdio.h>
#include <time.h>
int main(void) {
char buf[512];
long stamp = 1287055578;
struct tm x;
time_t cstamp = stamp; /* 1 */
x = *gmtime(&cstamp); /* 2 */
sprintf(buf, "month %d Day %d 24 Hour format %d minute %d second %d "
"subsecond nanoseconds 0",
x.tm_mon + 1, x.tm_mday, x.tm_hour, x.tm_min, x.tm_sec);
printf("%s\n", buf); /* long converted to string */
return 0;
}
1)gmtime
的值为time_t*
,因此我隐式将long
转换为time_t
并在下一步中传递该地址
2)gmtime
返回指向struct tm
对象的指针。取消引用指针并将对象复制到我的本地x
变量
您可能希望使用gm_time
而不是localtime
,而是让库函数处理时区和夏令时问题。
答案 2 :(得分:0)
感谢大家的答案,我最终这样做了
long UTCInSeconds = ...
struct tm * local;
local = localtime(UTCInSeconds);
Month = local->tm_mon + 1;
Day = local->tm_mday;
Year = local->tm_year + 1900;
Hour = local->tm_hour;
Minute = local->tm_min;
Second = local->tm_sec;