2011-03-25 97 views
16

我試圖將當前時間作爲一個「YYYY-MM-DD-HH-MM-SS」格式的字符串在優雅辦法。我可以從Boost的「日期時間」庫中獲取ISO格式的當前時間,但它有其他分隔字符串,這些字符串對我不起作用(我正在使用這個文件名)。 當然,我可以替換分隔字符串,但有一種感覺,有一種更好的方式來使用日期時間的格式化選項執行此操作。有沒有這種方法,如果是這樣,我該如何使用它?獲取當前時間爲YYYY-MM-DD-HH-MM-SS字符串

回答

30

使用std::strftime,它是標準的C++。

#include <cstdio> 
#include <ctime> 

int main() 
{ 
    std::time_t rawtime; 
    std::tm* timeinfo; 
    char buffer [80]; 

    std::time(&rawtime); 
    timeinfo = std::localtime(&rawtime); 

    std::strftime(buffer,80,"%Y-%m-%d-%H-%M-%S",timeinfo); 
    std::puts(buffer); 

    return 0; 
} 
+0

寫入'std :: string'的東西,因此對緩衝區溢出沒有任何顧慮,那就太好了。可以理解的是,'strftime'預計會有一個可預測的最大長度。有什麼問題嗎? – 2014-01-07 09:48:47

+0

有沒有**線程安全的**解決方案?請參閱[鏈接](http://en.cppreference.com/w/cpp/chrono/c/localtime) - std :: localtime()不是線程安全的。 – Yuri 2017-01-11 12:40:40

2

答案取決於你的意思。如果您嘗試輸出格式化的時間字符串,請使用strftime()。如果您嘗試將文本字符串解析爲二進制格式,請使用strptime()。