28

time_tとtmの構造があるとしましょう。Boostは使用できませんがMFCを使用できます。次のような文字列にするにはどうすればよいですか?

Mon Apr 23 17:48:14 2012

sprintfを使用する唯一の方法ですか?

4

6 に答える 6

51

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ロケールのファセットがあります。記憶が役立つなら、私はそれを一度は機能させることができましたが、その後、それは問題の価値がないと判断し、それ以来私はそれをしていません。

于 2012-04-23T22:16:23.070 に答える
16

やってみstd::put_timeます。使用方法については、こちらのリンクをご覧ください。フルフォーマットの文字列などをサポートします。

于 2012-04-23T22:14:04.173 に答える
2

ctime()その形式で文字列を生成します。へのポインタを取りますtime_t。aへのポインタを取り、同じことを行うもの
もあります。asctime()struct tm

于 2012-04-23T22:31:45.680 に答える
2

異なるロケールでのフォーマットについて心配する必要がある場合は、現在のロケールで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

于 2012-12-31T19:51:39.347 に答える
1
CTime obj1(time_tObj);

CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
于 2012-04-24T02:46:23.503 に答える
1

MFCにはCOleDateTime、テイクtime_t(または__time64_t)とFormatメソッドを持つコンストラクターがあります。

于 2012-04-23T22:17:36.640 に答える