Tho*_*ell 7 c++ locale standard-library c++11 visual-studio-2012
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
06/25/2013
Run Code Online (Sandbox Code Playgroud)
这不是我期望从en-GB语言环境中获得的日期格式.我也尝试过:
std::cout.imbue( std::locale("en-GB") );
Run Code Online (Sandbox Code Playgroud)
但同样,输出相同.这是我应该为这个语言环境获取的输出,还是我在某个地方犯了错误?
按预期工作。std::put_time根据流的区域设置工作,而不是全局区域设置。在输入cout之前创建并注入当前的全局语言环境。main对全局区域设置的后续更改不会影响它。你需要imbue()明确地这样做。
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |