设置CTime和CTimeSpan忽略夏令时

Make CTime and CTimeSpan ignore daylight saving time

本文关键字:夏令时 CTimeSpan CTime 设置      更新时间:2023-10-16

我正在使用CTime和CTimeSpan并使用它进行简单的算术。在某个点,我写了

...
CTime someTime;
CTimeSpan oneDay(1,0,0,0);
return someTime + oneDay;

现在,如果someTime是在夏令时,返回值不是(反之亦然),这个操作增加23小时(或25小时分别),这是绝对正确的。反正我需要的是日光节约完全被忽略了。我希望结果与求和运算前的日期相同。

解决这个问题的一种方法是检查这些情况并相应地纠正结果。但是我想知道是否有一种方法可以完全禁用夏令时功能。

最后我自己用CTime::GetLocalTm(...)改正了。

tm myTm;
original.GetLocalTm(&myTm);
BOOL bWasDST = (myTm.tm_isdst != 0);
result.GetLocalTm(&myTm);
BOOL bIsDST = (myTm.tm_isdst != 0);
if ((bWasDST - bIsDST) != 0)
{
    CTimeSpan dstCorrection(0, bWasDST - bIsDST, 0, 0);
    result += dstCorrection;
}