【问题标题】:C++ check if a date is validC++ 检查日期是否有效
【发布时间】:2012-03-15 06:06:03
【问题描述】:

是否有任何功能可以检查给定日期是否有效? 我不想从头开始写任何东西。

例如2012 年 10 月 32 日无效 并且 2010 年 10 月 10 日有效

【问题讨论】:

  • 这个值是从哪里来的?它是做什么用的?
  • 这是输入。我只是想检查它是否有效。

标签: c++ date time


【解决方案1】:

如果您的字符串始终采用该格式,最简单的做法是将字符串拆分为三个部分,填充tm 结构并将其传递给mktime()。如果它返回 -1,那么它不是一个有效的日期。

你也可以使用Boost.Date_Time来解析它:

string inp("10/10/2010");
string format("%d/%m/%Y");
date d;
d = parser.parse_date(inp, format, svp);

【讨论】:

  • 什么是 svp 和解析器?
  • mktime 将标准化日期。例如,如果日期为负数,它将回滚到上个月并相应地调整日期和月份成员。
  • mktime: 时间值允许超出正常范围
【解决方案2】:

提升日期时间类应该能够处理您需要的内容。 见http://www.boost.org/doc/libs/release/doc/html/date_time.html

【讨论】:

【解决方案3】:

如果日期的格式是固定的并且你不想使用boost,你总是可以使用strptime,在ctime header 中定义:

const char date1[] = "32/10/2012";
const char date2[] = "10/10/2012";
struct tm tm;

if (!strptime(date1, "%d/%m/%Y", &tm)) std::cout << "date1 isn't valid\n";
if (!strptime(date2, "%d/%m/%Y", &tm)) std::cout << "date2 isn't valid\n";

【讨论】:

  • 请记住 strptime() 是一个非标准扩展,并非在所有系统(包括 Windows)上都可用。
  • @spencercw:确实。然而,包括 Windows 在内的大多数系统都有开源实现。此外,它是 POSIX 的标准。 :)
猜你喜欢
  • 2017-02-28
  • 2023-03-15
  • 1970-01-01
  • 2013-01-09
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多