我使用CTime和CTimeSpan并使用它进行简单的算术运算。在某些时候,我做了类似
的事情...
CTime someTime;
CTimeSpan oneDay(1,0,0,0);
return someTime + oneDay;
现在,如果someTime
在夏令时期间且返回值不是(反之亦然),则此操作会增加23小时(或分别为25小时),这绝对是正确的。无论如何我还需要完全忽略夏令时。我希望结果与总和操作之前的日期相同。
解决此问题的一种方法是检查这些情况并相应地更正结果。但我想知道是否有办法完全禁用夏令时功能。
答案 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;
}