2009-10-30 17 views
24

C++ stl是否有標準的時間類?或者在寫入流之前必須轉換爲C字符串。例如,我要輸出的當前日期/時間爲一個字符串流:C++中是否有標準的日期/時間類?

 
time_t tm(); 
ostringstream sout; 
sout << tm << ends; 

在這種情況下,我得到寫出來爲數字,沒有任何格式的當前日期/時間。我可以用 C-運行時函數strftime格式化TM第一,但好像它不應該是必要的,如果STL具有可從time_t的值來實例化一個時間類

+2

現在有一個完整的和現代的C提案委員會收到++日期/時間/時區:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html 。這個建議基於這個github倉庫:https://github.com/HowardHinnant/date,它有一個完整的實現,完整的文檔和一個活躍的用戶社區。 – 2016-12-03 17:59:29

回答

4

還有一個ctime(&的time_t)輸出字符串(char *)的方法。

+1

除非您完全需要*日期/時間格式,否則這並不完全有用。但看着它只是讓我發抖,我不認爲我會想要在應用程序中看到它。 – Joey 2009-10-30 16:22:10

21

STL的不是一部分,但衆所周知庫提振。

我會去使用boost::date的方式。以下是一些示例:http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial

如果您沒有試出來升壓但我鼓勵你,因爲這樣做可以節省您大量的討厭的問題,因爲它掩蓋大多數操作系統相關的東西,如線程,例如。 boost中的許多內容僅爲標題(模板庫)。但是,日期時間需要一個lib或dll。

13

吹毛求疵:STL的是與通用容器和算法等標準模板庫交易,也不可能合併對日期的處理和計算類甚至在未來...

的C++標準庫本身包括STL和以前版本的C標準庫。後者通過#include <ctime>提供了一些日期和時間相關的功能,這已經在上面提到過了。

如果包裹(或簡單地使用)這些功能比boost拉動足夠(和更快),去與這些。他們沒有錯。

4

確定。這是最接近我已經發現了大約直接寫入時間流:

time_t t(time(NULL)); // current time 
tm tm(*localtime(&t)); 

std::locale loc(""); // current user locale 
ostringstream sout; 
const std::time_put<TCHAR> &tput = 
    std::use_facet<std::time_put<TCHAR> >(loc); 
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x')); 
sout << ends; 

CString sTest(sout.str().c_str()); 

一個非常有用的指南是Apache C++標準庫參考指南 http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

有在<了iomanip >頭get_timeput_time(我想這些都與C + + 11)有效地做字符串格式化或解析作業。

相關問題