7

私は Microsoft Visual Studio 2012 で作業しており、使用を検討していたstd::put_timeので、次の例を作成しました。

int main()
{
    std::time_t t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());

    std::locale::global( std::locale("en-GB") );

    std::cout << std::put_time( std::localtime( &t ), "%x" ) << std::endl;
}

これにより、次の出力が生成されます。

06/25/2013

en-GBこれは、ロケールに期待する日付形式ではありません。私も試しました:

std::cout.imbue( std::locale("en-GB") );

しかし、再び、同じ出力で。これは、このロケールで得られるはずの出力ですか、それともどこかで間違いを犯したのでしょうか?

4

1 に答える 1

4

意図したとおりに動作します。std::put_timeグローバル ロケールではなく、ストリームのロケールで動作します。coutが作成され、入力される前に現在のグローバル ロケールが吹き込まれますmain。その後グローバル ロケールを変更しても影響はありません。imbue()明示的に行う必要があります。

于 2013-07-11T02:05:37.290 に答える