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
へのポインターを受け取ります。struct tm
へのポインターを取り、同じことを行うasctime()
もあります。
異なるロケールでのフォーマットを心配する必要がある場合は、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
メソッド。