C++ stlには標準時間クラスがありますか?または、ストリームに書き込む前にc-stringに変換する必要がありますか。例、現在の日付/時刻を文字列ストリームに出力したい:
time_t tm(); ostringstream sout; sout << tm << ends;
この場合、現在の日付/時刻はフォーマットせずに数値として書き出されます。 c-ランタイム関数strftime
を使用して最初にtmをフォーマットできますが、stlにtime_t値からインスタンス化できる時間クラスがある場合は必要ないようです
STLの一部ではなく、よく知られているライブラリがブーストです。
私はboost::date
。以下に例を示します。 http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial 。
ブーストをまだ試していない場合は、多くの厄介な問題からあなたを救うので、それを行うことをお勧めします。たとえば、スレッド化のようなほとんどのOS依存のものを隠すからです。 boost
の多くのものはヘッダーのみです(テンプレートライブラリ)。ただし、datetimeにはlibまたはdllが必要です。
Nitpicking:標準であるSTLTemplateライブラリは一般的なコンテナやアルゴリズムなどを扱い、将来的にも日付の処理と計算のためのクラスを組み込む可能性は低い…
C++標準ライブラリ自体には、STLおよび以前のバージョンのC標準ライブラリが含まれています。後者は、#include <ctime>
既に上記で言及されています。
これらの関数をラップ(または単に使用)するだけで boost をプルするよりも十分な(そしてより速く)場合は、これらを使用してください。彼らには何の問題もありません。
文字列(char *)を出力する ctime (&time_t)メソッドもあります。
OK。ストリームに時間を直接書き込むことについて私が見つけた最も近いものは次のとおりです。
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#sec1
C++には、日付と時刻のクロノライブラリがあります。これは http://en.cppreference.com/w/cpp/chrono および http://www.cplusplus.com/reference/chrono/ で文書化されています