【问题标题】:Get Daylight Savings in C++ [duplicate]在 C++ 中获得夏令时 [重复]
【发布时间】:2016-03-12 15:20:59
【问题描述】:

我需要构建一个函数,如果是夏季时间,则返回“1”,如果是冬季,则返回“0”。

只是想询问一个算法来开始或如何开始会有所帮助。

【问题讨论】:

  • 一个可能的选项是time()localtime() 的组合来自<ctime>。这在 C 中有效,也应该在 C++ 中。这是否是一个好的选择是另一回事,但不这样做并非易事。这将或多或少地报告给定时间的冬季与夏季时间的状态。
  • 一种主要在全球范围内有效的算法是:1) 获取 1 月 1 日和 7 月 1 日的偏移量。如果相同,则不适用夏令时,返回0。 2) 获取 current 偏移量。 3) 如果当前偏移量等于两个偏移量中较小的,则标准时间生效,返回0,否则DST生效,返回1 .除非由于非 DST 原因(例如基本偏移量更改)而发生偏移量变化,否则这一点是正确的。

标签: c++ algorithm function dst


【解决方案1】:

对于窗户。

您可以使用_SYSTEMTIME 获取当前月份/日期(本地或系统时间)。然后,如果它在夏令时范围内,您可以返回是,您有夏令时,否则返回否。 (即制作自己的简单函数)

_SYSTEMTIME 和文档here. 的用法示例

【讨论】:

  • (a) 您可能应该明确提到这是针对 Windows 的,并且 (b) 我不清楚您如何从它返回的信息中获得夏令时是否有效。也许你有一个“……然后魔法发生……”进入“如果它属于夏令时范围”;你怎么知道夏令时是否有效?
  • @JonathanLeffler 已标记。而且我假设程序员会知道夏令时何时发生,所以从哪个月/日到其他月/日,他们只需检查他们当前获得的日期是否在该范围内。
  • 你知道变化发生在什么时候——在乔治亚州的摩洛哥(这个国家,而不是美国的州)、中国、日本、澳大利亚、智利、阿根廷?您知道某个国家/地区的规则每年变化的频率吗?有一个邮件列表——我相信今年的当前版本是一个适度的版本“2015f”,但它必须发布“2009s”,所以那一年有 19 个版本。并且通常一个版本捆绑了几个国家的变化。期望程序员“知道”并不是一个成功的策略。
  • @JonathanLeffler 点了。
  • 参见iana.org/time-zones:我在获取 2015g 时遇到了问题,但这应该是当前版本。 […嗯;重试成功;不知道发生了什么……] 这可能是 2015 年的最后一个版本,但要到 2016 年 1 月 1 日才能保证。
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 2011-08-01
  • 1970-01-01
  • 2016-03-06
  • 2019-09-09
  • 2015-03-10
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多