c++ - 这是 std::get_time 中的错误吗?

标签 c++ c++11

我正在尝试解析日期时间字符串并将结果放入 std::tm 结构中。下面是代码,

#include <iomanip>
#include <ctime>
#include <sstream>
#include <string>

std::stringstream ss;
struct std::tm when;

ss.str("8/14/2015 3:04:23 PM");
ss >> std::get_time(&when, "%m/%d/%Y %r");

运行代码后,when.tm_hour 为 27。这是一个错误,还是我做错了什么?

我在 Windows 7 上使用 Visual Studio 2013。

谢谢。

最佳答案

您在 Microsoft 的 std::num_get::do_get 函数实现中遇到了一个错误,特别是解析 AM/PM 的部分 (%p)部分时间:

    case 'p':
        _Ans = _Getloctxt(_First, _Last, (size_t)0, ":AM:am:PM:pm");
        if (_Ans < 0)
            _State |= ios_base::failbit;
        else
            _Pt->tm_hour += _Ans * 12;
        break;

问题是 _Getloctxt 返回 [0,3] 范围内的 int,而不是预期范围 [0,1]。

此错误已报告给 Microsoft(ID:808162),微软声称已在 Visual Studio 2015 中修复它。

关于c++ - 这是 std::get_time 中的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32019209/

相关文章:

c++:访问抽象基类中的私有(private)变量

c++ - OpenMP 和 STL vector

c++ - 没有 "new"C++ 的对象初始化

c++ - CUDA 内核似乎忽略了 "if"语句

c++ - 将指向成员的指针强制转换为大多数派生类型

c++ - 别名可变参数模板函数

c++ - 非线性函数最小化 C++

c++ - 编译器何时应该生成 move 构造函数?

c++ - 什么是 lambda 函数类型? C++

c++ - lambda函数可以递归吗?