是使用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;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2013.我尝试在Linux上构建,但我最新版本的GCC是4.7.3,它似乎还不支持get_time.
我的愚蠢错误或需要分隔符?
根据第二参数的描述, std::get_time不需要分隔符.
格式字符串由零个或多个转换说明符,空格字符和普通字符(%除外)组成.在不区分大小写的比较中,期望每个普通字符匹配输入流中的一个字符.每个空白字符都匹配输入字符串中的任意空格.每个转换规范都以%字符开头,可选地后跟E或O修饰符(如果不受语言环境支持则忽略),后跟确定说明符行为的字符.格式说明符与POSIX函数strptime()匹配
在我的Mac上,我使用clang ++(Apple LLVM版本5.0(clang-500.2.79)(基于LLVM 3.3svn))来编译代码,并运行程序,输出为:Sun Nov 5 12:34:56 2014.实际上,我已经安装了gcc 4.8.2,但它不支持std::get_time和std::put_time.然后我搜索此函数的实现状态,并发现在GCC 4.8.0中没有实现
它确实在VS2013中失败,在调用之后std::get_time,t中的所有元素都只是0.格式说明符不能在Windows上执行预期的操作.这不是你的错.
| 归档时间: |
|
| 查看次数: |
6644 次 |
| 最近记录: |