2016-11-25 92 views
0

我是C编程的新手,我想要一些简单任务的帮助。C - time_t字符串表示

所以我有这样的功能:

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

    return time_s; 
} 

我想这样做的就是在DD/MM/YYYY HH:MM格式的时间,并将其存储在time_s变量,这样我可以退货。我的问题是,我无法弄清楚如何格式化字符串并将其存储而不打印。到目前为止,我发现的所有方法都是在存储格式化字符串时实际打印格式化字符串的方法,这不是我想要的。

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

对不起,如果我没有正确解释一切,但我是C编程新手。

回答

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的参数仅供读者参考。

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

+1

一般来说,始终使用至少'snprintf'。它很容易通过普通的'sprintf'创建缓冲区溢出! – hyde

0

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

1

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

它适用于struct tm,因此您首先必须将time_t转换为使用localtimegmtime

一般
0

  1. 呼叫time()来获取当前时间进入一个time_t可变
  2. 呼叫localtime()得到一个指针指向一个struct tm结构与在单独的字段的时间信息
  3. 呼叫strftime()到获得所需的时间/日期格式。

推荐阅读localtime()strftime()手册页来获得所有细节

这里是一个示例代码,你想拥有什么,你将需要修改的strftime()格式字符串结果字符数组。

time_t  currentTimeSec = time(NULL); 
struct tm *tmStructptr; 
char  timeStamp[128]; 

tmStructptr = localtime(&currentTimeSec); 
strftime(timeStamp, sizeof(timeStamp), "YOUR FORMAT STRING" tmStructptr); 

注:仅提取一周的某一天,格式字符串是:“%W”