我的程序在时区为not
PST / PDT的Windows计算机上运行。但它需要根据PST / PDT时间规则运行。
到夏季/冬季时,该计划需要知道 PDT更改为PST的下一个日期,反之亦然 如何用C ++编程找到下一个夏季< - >冬季开关?
答案 0 :(得分:1)
由于美国国会的各种行为导致夏令时的开始和结束都发生了变化,因此下一次储蓄过渡的信息并不固定。我不知道您是否需要重新启动以应用DST更改,但如果这样做,您可能希望更频繁地更新下一次转换的估计值。
获取此信息的原生API为GetTimeZoneInformationForYear
。您可以传入特定的时区和年份。该函数填充TIME_ZONE_INFORMATION
结构;您想要的相关信息是TIME_ZONE_INFORMATION::DaylightDate
和TIME_ZONE_INFORMATION::StandardDate
答案 1 :(得分:0)
如果您使用的是Windows,请使用C#类执行此操作,并通过您选择的互操作将结果返回到C ++程序。另外,您可能最终会重建在C +中执行此操作的.Net代码,并且在此过程中会错过.Net将为您处理的所有边缘情况。
您可以使用TimeZoneInfo.Local,然后使用get the adjustment rules。
答案 2 :(得分:0)
丑蛮的暴力方法:
致电time(NULL)
,将当前时间作为time_t
值。
使用localtime()
将此值转换为struct tm
。 (考虑将tm_hour
成员调整为12,因此您每天都在中午检查。)
反复向tm_day
struct tm
成员添加1天,然后使用mktime()
转换回time_t
。
使用difftime()
将每个递增的time_t
值与前一个值进行比较。当`difftime()给你一个不接近86400.0(1天内的秒数)的值时,你就找到了DST转换。如果你这样做365次而没有找到过渡,那就错了。
如果您愿意对time_t
的表示做出一些假设,您可以采取一些捷径。
显然,这只是一个解决方案的大纲 - 我自己没有尝试过。
我刚刚重新阅读了这个问题,并意识到我完全忽略了你所说的计算机不在PST或PDT上的部分。 (你能为这个节目设定时区吗?)