2010-11-06 70 views
6

對於我寫一個小程序待辦事項,我有此形式如何使用C存儲time_t時間戳到文件?

time_t t = time(NULL); 

,並會保存每次輸入一個任務來表示,它正在輸入的時間時的時間戳。

我想將任務存儲到純文本文件中,以便可以保存和恢復狀態。我應該如何將時間戳存儲到文本文件中,在閱讀文本文件後應該如何讓它們回到我的程序中?

回答

12

轉換的time_tstruct tm使用gmtime(),然後轉換struct tm使用strftime()純文本(優選ISO 8601格式)。結果將是便攜的,可讀的和機器可讀的。

要回到time_t,只需將字符串解析回struct tm並使用mktime()即可。

參考:

代碼示例:

// Converting from time_t to string 
time_t t = time(NULL); 
struct tm *ptm = gmtime(&t); 
char buf[256]; 
strftime(buf, sizeof buf, "%F %T", ptm); 
// buf is now "2015-05-15 22:55:13" 

// Converting from string to time_t 
char *buf = "2015-05-15 22:55:13"; 
struct tm tm; 
strptime(buf, "%F %T", &tm); 
time_t t = mktime(&tm); 
+0

一個例子會非常好.. – Daniel 2013-11-19 13:32:43

+0

@simpleBob:只有三個函數調用,它們在提供的鏈接上都有詳細記錄。你有沒有嘗試過使用它們?你遇到過任何具體問題嗎? – 2013-11-19 18:48:29

+0

我只是想知道如何在使用'strftime()'後編碼回time_t。但我已經發現了'strptime'。謝謝! – Daniel 2013-11-20 08:32:59

1

如果你不介意有點假定爲不可移植的,只投time_tlonglong long如果你有一個C99編譯器),寫long價值,閱讀的價值和轉換回time_t

標準不保證一個time_t甚至表示爲一個長:它只是說time_t是一個算術類型,但訣竅上面應該爲所有健全的系統工作:-)

3

便攜式方式正在使用difftime函數。使用mktime計算所選曆元的time_t,然後使用difftime計算以秒爲單位的差值。要轉換回來,您可以從紀元開始作爲struct tm並將秒數添加到tm_sec,然後撥打mktime以獲得time_t

理智方法是假定time_t被表示爲自Unix紀元(1970-01-01 00:00 GMT)秒,並轉換爲一個大的整數型(long long最好)進行打印。 POSIX要求time_t是自紀元以來的秒數,並且在任何它的穩定系統上。

+0

我做了第一個建議,因爲我需要應付交叉編譯器和跨平臺的考慮。 – 2013-11-25 15:42:30

相關問題