Я использую 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;
}