我正在开发一个应用程序,其中日志文件的命名格式为“YYYYMMDDHHMM\u****.gz”。日志文件包含YYYY(年)、MM(月)、DD(日)、HH(小时)和MM(分钟)。我的类构造函数需要检查文件名是否有效(年、月、日和时间是否有效)。我认为通过将这些值传递给time\t结构,对于无效值,它将返回-1。但它没有返回-1。
下面是程序。
#include <iostream>
#include <iomanip>
#include <ctime>
#include <sstream>
int main() {
struct tm tm{};
std::istringstream iss("2018 12 22 00:26:00");
//std::istringstream iss("2018 12 aa 00:26:00"); --> THIS IS NOT -1
iss >> std::get_time(&tm, "%Y %m %d %H:%M:%S");
time_t time = mktime(&tm);
std::cout << time << std::endl;
std::cout << std::ctime(&time) << std::endl;
return 0;
}
订单号:
1545438360
Sat Dec 22 00:26:00 2018
但如果我给出日期
“2018 12 aa 00:26:00”
(月份:aa无效),仍在打印一些有效的o/p。
订单号:
1543536000
Fri Nov 30 00:00:00 2018
我需要丢弃文件名格式为“YYYYMMDDHHMM\u****的文件。gz“”和目录中14天的。但time\u t没有为无效的日期时间格式提供-1。有没有人能告诉我是否有任何方法可以检查给定的日期是否有效,或者我是否需要手动检查?