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

标签 c++ windows boost time boost-date-time

一个有趣的事实,我敢肯定我们大多数玩过时间领域的人都知道 - 有些日期/时间可能看起来有效但实际上并不存在,例如夏令时切换时间凌晨 2:30。

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

最佳答案

使用特定于 Windows 的函数,您可以制作 a call to TzSpecificLocalTimeToSystemTime() 后跟 a call to SystemTimeToTzSpecificLocalTime() 与相关时区。

完成后,如果两者不同,您将得到一个无效时间,因为 TzSpecificLocalTimeToSystemTime 会将无效时间转换为“真实”时间。

bool IsValidTime(TIME_ZONE_INFORMATION tz, SYSTEMTIME st)
{
    SYSTEMTIME utcSystemTime, st2;
    TzSpecificLocalTimeToSystemTime(&tz, &st, &utcSystemTime);
    SystemTimeToTzSpecificLocalTime(&tz, &utcSystemTime, &st2);

    return (st != st2);
}

关于c++ - 有没有办法确定日期/时间是否不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36493505/

相关文章:

c - c mktime 在 Windows 和 GNU/Linux 上是否不同?

windows - 在第三方应用程序窗口中捕获文本的方法

c++ - 默认初始化 boost::optional

c++ - 用于检查表打印的 Google 单元测试

c++ - 异常处理相关

windows - 标题名称中的 taskkill 窗口空格

c++ - 嵌套 boost::bind 与 io_service::post

c++ - Boost 1.57.0 程序选项 MSVS 2013 链接器错误

c++ - 如何计算哪个函数请求多少字节?

c++ - Signals2 connect() 使用模板