我今天正在使用一些时间函数并注意到标准转换使用 %r
(要么 %p
)似乎不适合输入通过 std::get_time()
在g ++或clang ++上。看到 这个实时代码版本 对于g ++和clang ++。它 不 似乎在Windows下用VC ++按预期工作(见此 密切相关的问题)。还要注意,效果是否相同 imbue
线包括在内。我的Linux机器上的语言环境设置为 "en_US.UTF-8"
如果重要的话
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
#include <ctime>
int main(){
std::tm t{};
std::stringstream ss{"1:23:45 PM"};
ss.imbue(std::locale(std::cin.getloc(),
new std::time_get_byname<char>("en_US")));
ss >> std::get_time(&t, "%r");
if (ss.fail()) {
std::cout << "Conversion failed\n" << std::put_time(&t, "%r") << '\n';
} else {
std::cout << std::put_time(&t, "%r") << '\n';
}
}