有没有办法确定日期/时间是否不存在?

dla*_*nod 10 c++ windows time boost boost-date-time

有趣的事实是,我确信我们大多数人都能在时间领域发挥作用 - 有些日期/时间可能看似有效,但实际上并不存在,例如夏令时切换时间凌晨2:30.

在C++(标准或Windows)中是否有办法确定给定的时区规范中给定的日期/时间是否有效?

Pat*_*ick 0

time_t 格式是一个整数值(自 1/1/1970 00:00 UTC 以来的秒数),因此 time_t 的每个可能值都存在(当然在所使用的整数类型的限制内)。

另一方面,并​​非“struct tm”的所有可能值(其中有日、月、年、小时、分钟和秒的成员)都存在(这可能就是您的意思)。要检查“struct tm”是否存在,您必须执行以下操作:

  • 将成员 tm_isdst 设置为 -1。这表明您不知道是否是夏令时。
    • 使用 mktime() 将“struct tm”转换为 time_t。
    • 使用 localtime() 将 time_t 转换回“struct tm”。
    • 将生成的“struct tm”与初始“struct tm”进行比较,忽略 tm_isdst 字段(或使用它来查看您是否处于 DST 状态)。