2009-10-30 21 views
24

C++ stlに標準のタイムクラスがありますか?またはストリームに書き込む前にc-stringに変換する必要がありますか。私は、任意のフォーマットなしの数として書き出さ現在の日付/時刻を取得する。この場合C++に標準の日付/時刻クラスはありますか?

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

:例、私は出力に文字列ストリームに現在の日付/時刻をしたいです。 STLはtime_tの値からインスタンス化することができる時間のクラスを持っている場合

+2

委員会の前に完全で現代的なC++の日付/時間/タイムゾーンの提案があります。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html 。この提案は、githubリポジトリ(https://github.com/HowardHinnant/date)に基づいています。このリポジトリには、完全な実装、詳細なドキュメント、およびアクティブなユーザーコミュニティがあります。 –

答えて

4

ctime(& time_t型)もあり、私は、TM最初にフォーマットする C-ランタイム関数strftimeを使用することができますが、それは必要ありませんように、それはそうですstring(char *)を出力するメソッドです。

+1

日付/時刻形式が正確に*必要でない限り、正確には役に立たないものです。それを見ても、私は震えさせるだけです。私はアプリケーションでそれを見たいとは思っていません。 – Joey

21

STLの一部ではありませんが、よく知られているライブラリはboostです。

私はboost::dateを使用します。いくつか例があります:http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial

ブーストを試していないのであれば、多くの厄介な問題からあなたを救うので、私はそうすることをお勧めします。 boostの多くはヘッダーのみです(テンプレートライブラリ)。しかしdatetimeにはlibやdllが必要です。

13

つべこべ:STL等汎用コンテナとアルゴリズムと標準テンプレート図書館のお得な情報であること、さらには将来の日付処理と計算のためのクラスを組み込むことはほとんどありません...

C++標準ライブラリ自体は含まれてSTLと以前のバージョンのC標準ライブラリが含まれています。後者は、すでに上述した#include <ctime>を介して日付と時間に関連する機能を提供しています。

boostを引っ張るよりも、これらの機能をラッピング(または単に使用)すれば十分です(そして、より速く)。それらには何も問題はありません。

4

OK。 <iomanip>ヘッダー内get_timeput_timeは(あり

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

:ここで私はおよそ直接ストリームに書き込み時間を発見した最も近いです私は実際には文字列の書式設定や解析の仕事を行うC + + 11)と一緒に来たと思います。

関連する問題