使用std::get_time解析字符串是否需要分隔符?我找不到任何证据可以说是的。我试图解析一个ISO日期/时间字符串,例如"20140105T123456“-例如:
例如,
#include <iostream>
#include <sstream>
#include <locale>
#include <iomanip>
#include <ctime>
int main(int argc, char* argv[])
{
std::tm t = { 0 };
// fails
std::istringstream ss("20141105T123456");
ss >> std::get_time(&t, "%Y%m%dT%H%M%S");
// works
//std::istringstream ss("2014 11 05 T 12 34 56");
//ss >> std::get_time(&t, "%Y %m %d T %H %M %S");
std::ostringstream os;
std::cout << std::put_time(&t, "%c") << std::endl;
}我正在使用2013。我试着在Linux上构建,但是我拥有的GCC的最新版本是4.7.3,它似乎还不支持get_time。
我犯了个愚蠢的错误还是需要分离器?
发布于 2016-07-14 20:49:18
标准中对POSIX strptime()函数的引用造成了一些混乱。POSIX标准指定转换操作符由非alpha字符分隔.
应用程序应确保在任何两个转换规范之间存在空白或其他非字母数字字符。
GLIBC版本的strptime (和,海事组织,任何正常的执行)不需要这些分离器。[http://man7.org/linux/man-pages/man3/strptime.3.html -见注释部分。]
要求分隔符使得无法解析符合ISO-8601日期/时间基本格式。由于C++也是一个ISO标准,它的strptime()函数应该能够解析这种格式。
我认为需要澄清std::get_time()文档,以明确说明不需要分隔符,并通过指向ISO-8601证明该声明的合理性。应该进一步澄清的是,POSIX strptime()标准只指定符合实现所需支持的转换说明符。
https://stackoverflow.com/questions/21172767
复制相似问题