對於我寫一個小程序待辦事項,我有此形式如何使用C存儲time_t時間戳到文件?
time_t t = time(NULL);
,並會保存每次輸入一個任務來表示,它正在輸入的時間時的時間戳。
我想將任務存儲到純文本文件中,以便可以保存和恢復狀態。我應該如何將時間戳存儲到文本文件中,在閱讀文本文件後應該如何讓它們回到我的程序中?
對於我寫一個小程序待辦事項,我有此形式如何使用C存儲time_t時間戳到文件?
time_t t = time(NULL);
,並會保存每次輸入一個任務來表示,它正在輸入的時間時的時間戳。
我想將任務存儲到純文本文件中,以便可以保存和恢復狀態。我應該如何將時間戳存儲到文本文件中,在閱讀文本文件後應該如何讓它們回到我的程序中?
轉換的time_t
到struct 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);
如果你不介意有點假定爲不可移植的,只投time_t
到long
(long long
如果你有一個C99編譯器),寫long
價值,閱讀的價值和轉換回time_t
。
標準不保證一個time_t
甚至表示爲一個長:它只是說time_t
是一個算術類型,但訣竅上面應該爲所有健全的系統工作:-)
的便攜式方式正在使用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
是自紀元以來的秒數,並且在任何它的穩定系統上。
我做了第一個建議,因爲我需要應付交叉編譯器和跨平臺的考慮。 – 2013-11-25 15:42:30
一個例子會非常好.. – Daniel 2013-11-19 13:32:43
@simpleBob:只有三個函數調用,它們在提供的鏈接上都有詳細記錄。你有沒有嘗試過使用它們?你遇到過任何具體問題嗎? – 2013-11-19 18:48:29
我只是想知道如何在使用'strftime()'後編碼回time_t。但我已經發現了'strptime'。謝謝! – Daniel 2013-11-20 08:32:59