c++ - std::put_time 的 MSVC 实现

标签 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::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/

相关文章:

c++ - 继承,覆盖和虚函数,以避免重复代码

c++ - 使用 UDP LabVIEW 与 UDP c++ 套接字通信

c++ - 如何在 C++ 中访问作为指针传递的函数的参数

visual-studio - VS 2012 中的智能感知中的向下箭头是什么意思

c++ - std::regex 是否保证最坏情况下的时间复杂度?

c++11 - 将 OpenMP 与 C++11 基于范围的 for 循环结合使用?

c++ - 如何在 ADO 中读取 NULL 值

visual-c++ - Visual Studio 2012 上的 vc++ 项目缺少 mfc110ud.dll

vb.net - 两个应用程序之间的序列化

c++ - 为什么 auto 的推论不同?