web-dev-qa-db-ja.com

C ++に標準の日付/時刻クラスはありますか?

C++ stlには標準時間クラスがありますか?または、ストリームに書き込む前にc-stringに変換する必要がありますか。例、現在の日付/時刻を文字列ストリームに出力したい:

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

この場合、現在の日付/時刻はフォーマットせずに数値として書き出されます。 c-ランタイム関数strftimeを使用して最初にtmをフォーマットできますが、stlにtime_t値からインスタンス化できる時間クラスがある場合は必要ないようです

28
Farid Z

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が必要です。

22
jdehaan

Nitpicking:標準であるSTLTemplateライブラリは一般的なコンテナやアルゴリズムなどを扱い、将来的にも日付の処理と計算のためのクラスを組み込む可能性は低い…

C++標準ライブラリ自体には、STLおよび以前のバージョンのC標準ライブラリが含まれています。後者は、#include <ctime>既に上記で言及されています。

これらの関数をラップ(または単に使用)するだけで boost をプルするよりも十分な(そしてより速く)場合は、これらを使用してください。彼らには何の問題もありません。

13
mkluwe

<iomanip>ヘッダーには get_timeput_time があり(これらはC++ 11に付属していると思います)、文字列のフォーマットやジョブの解析を効果的に行います。

6
zahir

文字列(char *)を出力する ctime (&time_t)メソッドもあります。

4
bua

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

4
Farid Z

C++には、日付と時刻のクロノライブラリがあります。これは http://en.cppreference.com/w/cpp/chrono および http://www.cplusplus.com/reference/chrono/ で文書化されています

3
Curg