在C中将UTC转换为天,小时分钟等

时间:2010-10-14 01:48:39

标签: c datetime date time

我有一个long,它有UTC格式的时间作为某些数据的时间戳,现在我想将它转换为这种格式: 第1-12个月 第1-31天 24小时格式0-23 分0-59 第二次0-59 亚秒纳秒0-999,999,999

现在纳秒显然可以设置为0,因为它不需要那么准确。

这样做的最佳方法是什么?我已经看到大量的例子,但它们令人困惑,似乎无法转换任意日期,它们只能用于转换当时的确切时间。

3 个答案:

答案 0 :(得分:0)

您可能需要查看ctime标题。 asctimestrftimectime等将时间转换为字符串。

答案 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;