我正试图从字符串中获取日期,这是一个以前被问过一千次的问题,但出于某种原因,即使我遵循它们时所有的例子都是一样的,它也不起作用。
这是我的代码:
struct std::tm tm;
std::istringstream stringStream("191121");
stringStream >> std::get_time(&tm, "%d%m%y");
std::time_t time = mktime(&tm);
我认为我使用的是正确的格式,我在这里找到了:https://www.boost.org/doc/libs/1_77_0/doc/html/date_time/date_time_io.html#date_time.format_flags
尽管它来自助推,但据我所知,这些标志是相当标准的。
每当我运行此代码时,变量time
总是-1。
std::get_time
只能填充字符串中存在的tm
的字段(未指定实现是否将未使用的字段设置为零(。
由于tm
未初始化,这可能会导致无效时间,从而导致mktime
失败。在代码开始时初始化tm
可以修复问题。在使用流操作的结果之前,检查流操作是否成功也是一个好主意。
std::tm tm{};
std::istringstream stringStream("191121");
stringStream >> std::get_time(&tm, "%d%m%y");
if (!stringStream) {
throw std::invalid_argument("invalid date string");
}
std::time_t time = mktime(&tm);