Заставьте CTime и CTimeSpan игнорировать переход на летнее время

Я использую CTime и CTimeSpan и делаю простую арифметику с ним. В какой-то момент я делаю что-то вроде

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

сейчас если someTime находится в летнее время, и возвращаемое значение не (или наоборот), эта операция добавляет 23 часа (или 25 часов соответственно), что абсолютно правильно. В любом случае мне нужно, чтобы летнее время полностью игнорировалось. Я хочу, чтобы результат совпадал с днем ​​до операции суммирования.

Один из способов решить эту проблему — проверить эти случаи и соответствующим образом исправить результат. Но мне было интересно, есть ли способ вообще отключить функцию перехода на летнее время.

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;
}
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector