首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查给定的年份、月份、日期和时间格式是否在C++中有效?

如何检查给定的年份、月份、日期和时间格式是否在C++中有效?
EN

Stack Overflow用户
提问于 2022-06-27 02:12:48
回答 1查看 67关注 0票数 1

我正在开发一个应用程序,其中日志文件将以"YYYYMMDDHHMM_****.gz“格式命名。日志文件包含YYYY (年份)、MM (月份)、DD (日)、HH (小时)和MM (分钟)。我的类构造函数需要检查文件名是否有效(年份、月、日和时间是否有效)。我认为通过将这些值传递给time_t结构,它将返回无效值的-1。但它不会再回来了。

下面是节目。

代码语言:javascript
复制
#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;
}

O/P:

代码语言:javascript
复制
1545438360
Sat Dec 22 00:26:00 2018

但如果我给出的日期为“2018年12 aa 00:26:00" (月份: aa无效),它仍在打印一些有效的操作/p。

O/P:

代码语言:javascript
复制
1543536000
Fri Nov 30 00:00:00 2018

我需要丢弃那些文件名为“YYYYMMDDHHMM_****.gz”格式的文件,这些文件在目录中有14天的历史。但是time_t没有为无效的日期时间格式提供-1。有谁可以让我知道是否有任何方法来检查给定的日期是否有效,或者我是否需要手动检查?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-27 02:29:49

您需要检查std::get_time本身是否失败。失败的操作是转换,而不是从结果的time_t值构造struct tm

cppreference.com上的示例代码给出了一个非常容易遵循的示例,说明了如何做到这一点:

代码语言:javascript
复制
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail()) {
        std::cout << "Parse failed\n";

std::get_time失败时,它会将输入流设置为失败状态,所以您所做的就是检查它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72766402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档