21xrx.com
2024-11-05 14:51:17 Tuesday
登录
文章检索 我的文章 写文章
如何在C++中判断日期的有效性
2023-07-08 00:51:42 深夜i     --     --
C++ 日期 有效性 判断 算法

在C++中判断日期的有效性需要先确定日期的格式,一般我们使用“年-月-日”或者“月/日/年”的格式。

针对“年-月-日”格式的日期,可以通过以下步骤判断日期的有效性:

1. 检查年份是否为闰年,如果是闰年则二月有29天,否则为28天。

2. 检查月份是否合法,即介于1-12之间。

3. 检查日期是否合法,即介于1-31之间,但是对于4、6、9、11月份只能有30天,对于2月份则根据是否为闰年确定天数。

若以上步骤都通过且年、月、日的输入均为正整数,则该日期为有效日期。

而对于“月/日/年”的格式日期的判断,可按照以下方法:

1. 提取出月、日、年,判断是否为正整数。

2. 检查月份是否合法,即介于1-12之间。

3. 检查日期是否合法,即介于1-31之间,但是对于4、6、9、11月份只能有30天,对于2月份则根据是否为闰年确定天数。

若以上步骤都通过,则该日期为有效日期。

除此之外,在实际开发过程中,还需要考虑周年和月份之间的天数不同等一些边界情况。

代码示例:


bool isValidDate(int year, int month, int day)

{

  if (year < 0 || month < 1 || month > 12 || day < 1 || day > 31)

    return false;

  if (month == 4 || month == 6 || month == 9 || month == 11)

    return (day <= 30);

  if (month == 2)

    return (day <= (28 + (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))));

  return true;

}

bool isValidDateFormat(const std::string &dateString, const std::string &format)

{

  std::istringstream ss(dateString);

  int month, day, year;

  char separator;

  if (format == "MM/DD/YYYY") // Month-Day-Year format

    ss >> month >> separator >> day >> separator >> year;

  else // Year-Month-Day format

    ss >> year >> separator >> month >> separator >> day;

  if (ss.fail() || ss.peek() != EOF || separator != '/' && separator != '-')

    return false;

  return (isValidDate(year, month, day));

}

需要注意的是,以上函数只针对“年-月-日”和“月/日/年”两种常见日期格式进行了判断。如果有其他格式的日期需要判断,可以根据实际情况稍作修改即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复