2016-11-25 90 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」