代码之家  ›  专栏  ›  技术社区  ›  rollsch

用C将UTC转换为天、小时、分钟等

  •  0
  • rollsch  · 技术社区  · 15 年前

    我有一个long,它将时间以UTC格式作为某些数据的时间戳,现在我想将其转换为以下格式: 1-12月 第1-31天 24小时制0-23 0~59分钟 第二~59 亚秒0-999999999

    现在纳秒显然可以设置为0,因为它不需要如此精确。

    最好的方法是什么?我见过很多例子,但它们都很混乱,似乎不适合转换任意日期,它们只适用于转换当时的确切时间。

    3 回复  |  直到 13 年前
        1
  •  0
  •   pmg    15 年前

    干得好。注意注释行

    #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) 通用时间 返回指向 struct tm 对象。取消引用该指针并将对象复制到本地 x 变量

    而不是 gm_time ,您可能想使用 localtime 并使图书馆功能处理时区和夏令时问题。

        2
  •  0
  •   Donotalo    15 年前

    你可能想调查一下 ctime 标题。 asctime , strftime , ctime ETC将时间转换为字符串。

        3
  •  0
  •   rollsch    15 年前

    谢谢大家的回答,我以这种方式结束了

    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;
    
    推荐文章