Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MSVCs std::put_时间的实现_C++_Visual Studio 2012_C++11_Locale_Standard Library - Fatal编程技术网

C++ MSVCs std::put_时间的实现

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

我正在使用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;
}
这不是我从
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") );