【发布时间】:2016-07-29 08:34:43
【问题描述】:
有趣的事实是,我相信我们中的大多数玩时间领域的人都知道 - 有些日期/时间可能看起来有效但实际上并不存在,例如夏令时切换时间凌晨 2:30。
在 C++(标准或 Windows)中是否有办法确定给定日期/时间在给定时区规范中是否有效?
【问题讨论】:
-
一个有趣的问题,当然。您是否还需要支持闰第二天,例如 2015 年 6 月 30 日、23.59.60? (如果这样排除了 Google 的时间 API)我认为提升日期时间库将是最好的起点。我使用这些库,但不是为了这个特定的东西。
-
我已经标记了“boost-date-time”,也许是调皮地标记了“boost”,因为我认为解决方案可能是开箱即用的,或者不是特别难以实施那个框架。
-
标准 C++ 库无法处理时间。如果您以 Windows 为目标,则可以使用 SystemTimeToFileTime() 或 SystemTimeToTzSpecificLocalTime()。传递错误的日期会使函数失败并显示 ERROR_INVALID_PARAMETER。如果它必须是跨平台的,那么你必须去购买图书馆。
-
C++ 标准库故意不合适。有太多的边缘情况意味着通用的通用日期时间库无法充分标准化。我遇到的最接近的(增强)依赖于配置文件。看看 Java 用那些简单的
java.util.Date和java.util.Calendar东西把自己弄得一团糟。 -
也许 Howard Hinnant 的 library 是另一种选择? (cppcon talk)
标签: c++ windows boost time boost-date-time