问题 用g ++和clang ++打破std :: get_time吗?


我今天正在使用一些时间函数并注意到标准转换使用 %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';
    }
}

11651
2018-05-31 18:21


起源

这似乎是一个libstdc ++问题。用libc ++来解析这个问题。 - Howard Hinnant
@HowardHinnant:你是 对。我应该重新提出这个问题吗? - Edward
它看起来像 履行 不处理 %r 要么 %p。如果还有另一个地方他们应该被处理,我找不到它。 - interjay


答案:


正如评论者指出的那样,这实际上是一个错误(遗漏) libstdc++。一个 错误报告 已提交。


10