Сделать Ctime и Ctimespan игнорировать летнее время
Вопрос
Я использую 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;
}
.