Сделать Ctime и Ctimespan игнорировать летнее время

StackOverflow https://stackoverflow.com//questions/25030709

  •  21-12-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top