web-dev-qa-db-ja.com

C ++で日付と時刻の文字列をフォーマットする方法

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

Mon Apr 23 17:48:14 2012

Sprintfを使用する唯一の方法はありますか?

16
Tae-Sung Shin

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ファセットは、が同じことを行うことができるロケールのファセットです。メモリが機能する場合、私はそれを一度動作させることができましたが、その後それはトラブルの価値がないと判断し、私はそれをやったことがありません。

33
Jerry Coffin

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

11
Kevin Anderson

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

2
Alexey Frunze

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

2
GilesDMiddleton
CTime obj1(time_tObj);

CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
1
Jeeva

MFCには COleDateTime があり、time_t(または__time64_t)を取り、 Format メソッド。

1
Mark Ransom