time_tとtmの構造があるとしましょう。Boostは使用できませんがMFCを使用できます。次のような文字列にするにはどうすればよいですか?
Mon Apr 23 17:48:14 2012
sprintfを使用する唯一の方法ですか?
Cライブラリには、strftime
特に日付/時刻のフォーマット用が含まれています。あなたが求めているフォーマットは、次のようなものに対応しているようです。
char buffer[256];
strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);
バッファを明示的std::put_time
に処理する必要がなくなりますが、同様のフォーマット文字列を使用していると思います。出力をストリームに書き込みたい場合は非常に便利ですが、文字列に変換するのはそれほど役に立ちません。次のようなことを行う必要があります。
std::stringstream buffer;
buffer << std::put_time(&your_tm, "%a %b %d %H:%M:%S %Y");
// now the result is in `buffer.str()`.
std::put_time
はC++11の新機能ですが、C ++ 03には、同じことを実行できるtime_put
ロケールのファセットがあります。記憶が役立つなら、私はそれを一度は機能させることができましたが、その後、それは問題の価値がないと判断し、それ以来私はそれをしていません。
やってみstd::put_time
ます。使用方法については、こちらのリンクをご覧ください。フルフォーマットの文字列などをサポートします。
ctime()
その形式で文字列を生成します。へのポインタを取りますtime_t
。aへのポインタを取り、同じことを行うもの
もあります。asctime()
struct tm
異なるロケールでのフォーマットについて心配する必要がある場合は、現在のロケールでCRTを初期化することを忘れないでください。これはCOleDateTimeにも影響します。
setlocale(LC_COLLATE,“.OCP”); // sets the sort order
setlocale(LC_MONETARY, “.OCP”); // sets the currency formatting rules
setlocale(LC_NUMERIC, “.OCP”); // sets the formatting of numerals
setlocale(LC_TIME, “.OCP”); // defines the date/time formatting
MSDNの記事やその他のソースに関連する私のブログ投稿を参照してください。 http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
MFCにはCOleDateTime
、テイクtime_t
(または__time64_t
)とFormat
メソッドを持つコンストラクターがあります。