MSVCs Implementation of std::put_time

MSVCs Implementation of std::put_time

本文关键字:put time std Implementation of MSVCs      更新时间:2023-10-16

我正在使用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") );

但是,同样的输出。这是我应该得到的这个区域设置的输出,还是我在某个地方犯了错误?

按预期工作。std::put_time在流的区域设置之外工作,而不是全局区域设置。在输入main之前,将创建cout,并将其融入当前的全局语言环境。后续对全局区域设置的更改不会影响它。您需要显式地imbue()它。