我正在尝试解析日期时间字符串并将结果放入 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/