C - time_t字符串表示

时间:2016-11-25 14:07:24

标签: c time-t

我是C编程的新手,我想帮助完成一项简单的任务。

所以我有这个功能:

buildAutomatically: {
  title: 'Build Automatically',
  type: 'boolean',
  default: false,
}

"buildAutomatically: {
  "title": "Build Automatically",
  "type": "boolean",
  "default": false
}

我想要做的是获取DD / MM / YYYY HH:MM格式化时间并将其存储在time_s变量中,以便我可以返回它。我的问题是我无法弄清楚如何格式化字符串并存储它而不打印它。到目前为止,我所发现的只是sprint方法,它实际上在存储时打印格式化的字符串,这不是我想要的。

简而言之,我只想从time_t时间开始,以我提到的格式存储在time_s中。

很抱歉,如果我没有正确解释所有内容,但我是C编程新手。

4 个答案:

答案 0 :(得分:1)

函数ctime采用time_t并以固定格式输出字符串。如果这不足以完成您的任务,您应该使用strftime。这有一大堆格式说明符,可以满足您的需要。

适用于struct tm,因此您首先必须使用time_tlocaltimegmtime转换为.ix[]

答案 1 :(得分:0)

您需要sprintf,类似于printf但是"打印"将结果放入缓冲区而不是屏幕上。

将指针返回静态缓冲区:

char *time2str(time_t time) {
     static_char *str_fmt = "%02d/%02d/%4d %02d:%02d";

     static char time_s[20];                             // ugly, 20 is hopefully enough
  // ^ static is important here, because we return a pointer to time_s
  //   and without static, the time_s buffer will no longer exist once the
  //   time2str function is finished

     sprintf(time_s, str_fmt, time.....);
     return time_s;
}

或(更好),我们提供一个缓冲区(足够长),其中放置转换后的字符串:

void time2str(time_t time, char *time_s) {
     static_char *str_fmt = "%02d/%02d/%4d %02d:%02d";
     sprintf(time_s, str_fmt, time.....);
     return time_s;
}
...
char mytime[20];                                         // ugly, 20 is hopefully enough
time2str(time, mytime);
printf("mytime: %s\n, mytime);

或time2str函数返回一个新分配的缓冲区,该缓冲区将包含转换后的字符串。必须稍后使用free释放该缓冲区。

char *time2str(time_t time) {
     static_char *str_fmt = "%02d/%02d/%4d %02d:%02d";
     char *time_s = malloc(20);                          // ugly, 20 is hopefully enough
     sprintf(time_s, str_fmt, time.....);
     return time_s;
}
...
char *mytime = time2str(time);
printf("mytime: %s\n, mytime);
free(mytime);

完成sprintf的论证是留给读者的练习。

免责声明:未经测试的非错误检查代码仅用于演示目的。

答案 2 :(得分:0)

time_t值转换为struct tm类型后,您可以使用strftime()

答案 3 :(得分:0)

一般来说,

  1. 致电time()以将当前时间转换为time_t变量
  2. 调用localtime()获取指向struct tm结构的指针,并在单独的字段中显示时间信息
  3. 致电strftime()以获取所需的时间/日期格式。
  4. 建议阅读localtime()strftime()的手册页以获取所有详细信息

    这是一个示例代码,您需要在结果char数组中修改strftime()格式字符串。

    time_t     currentTimeSec = time(NULL);
    struct tm *tmStructptr;
    char       timeStamp[128];
    
    tmStructptr = localtime( &currentTimeSec );
    strftime( timeStamp, sizeof(timeStamp), "YOUR FORMAT STRING" tmStructptr );
    

    注意:要仅提取星期几,格式字符串将为:"%w"