我正在使用 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
,并注入(inject)了当前的全局语言环境。随后对全局语言环境的更改不会影响它。您需要显式imbue()
它。
关于c++ - std::put_time 的 MSVC 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17297105/