使用%d%m%y格式创建am std::time_t时,到目前为止的字符串在C++中不起作用



我正试图从字符串中获取日期,这是一个以前被问过一千次的问题,但出于某种原因,即使我遵循它们时所有的例子都是一样的,它也不起作用。

这是我的代码:

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);

相关内容

最新更新