C++ MSVCs std::put_时间的实现
我正在使用Microsoft Visual Studio 2012,并且正在考虑使用C++ MSVCs std::put_时间的实现,c++,visual-studio-2012,c++11,locale,standard-library,C++,Visual Studio 2012,C++11,Locale,Standard Library,我正在使用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
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;
}
这不是我从en-GB
locale中期望的日期格式。我还尝试:
std::cout.imbue( std::locale("en-GB") );
但是,同样的输出。这是我应该为该区域设置获得的输出,还是我在某个地方犯了错误?按预期工作
std::put_time
在流的区域设置之外工作,而不是全局区域设置<在输入main
之前,将创建code>cout,并使用当前全局语言环境。对全局语言环境的后续更改不会影响它。您需要显式地使用imbue()
。这肯定是错误的。@R.MartinhoFernandes您知道这是否已在Microsoft的bug数据库中存档吗?那么为什么std::cout.imbue(std::locale(“en GB”)
在使用std::put_time
之前会产生相同的结果?可能是因为“en GB”不是MSVC实现的std::locale
可以识别的区域设置标识符(请注意,标准没有指定此字符串的形式)。“English_Britain”对我来说很有用,因为生成的输出是日/月/年格式。
std::cout.imbue( std::locale("en-GB") );