使CTime和CTimeSpan忽略夏令时

时间:2014-07-30 07:09:10

标签: c++ mfc dst ctime

我使用CTime和CTimeSpan并使用它进行简单的算术运算。在某些时候,我做了类似

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

现在,如果someTime在夏令时期间且返回值不是(反之亦然),则此操作会增加23小时(或分别为25小时),这绝对是正确的。无论如何我还需要完全忽略夏令时。我希望结果与总和操作之前的日期相同。

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

1 个答案:

答案 0 :(得分:1)

我最后使用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;
}