【发布时间】:2015-11-08 05:59:34
【问题描述】:
我正在尝试解析日期时间字符串并将结果放入 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。
谢谢。
【问题讨论】:
-
很奇怪,我根本无法让它在 g++ 中工作,而且 Ideone 无法解析基本日期和时间。我很好奇这里发生了什么。
-
Clang/libc++ 说 15. GCC/libstdc++ 无法解析。这很有趣。
-
尝试在
get_time之前注入不同的语言环境。即ss.imbue(std::locale("en_US"));我不确定Windows支持哪些语言环境,或者它是否期望en-US与en_US。您可能需要四处寻找。 -
正常使用将涉及在流式传输之前使用
ss.imbue(std::locale(<something>))。由于操作可能会失败,请在打印when.tm_hour之前检查ss.fail()。 -
看起来这个问题是由字符串中的“PM”引起的。如果它更改为“AM”,则一切正常。开发者是否添加了 24 而不是 12?