Crea ctime e ctmespan Ignora l'ora legale
Domanda
Sto usando ctime e ctimespan e facendo un semplice aritmetico con esso.Ad un certo punto sto facendo qualcosa come
...
CTime someTime;
CTimeSpan oneDay(1,0,0,0);
return someTime + oneDay;
.
Ora se someTime
è durante l'ora legale e il valore di ritorno non è (o viceversa) questa operazione aggiunge 23 ore (o 25 ore rispettivamente) che è assolutamente corretta.Quello che ho bisogno comunque è che la luce del giorno viene ignorata interamente.Voglio che il risultato sia lo stesso tempo del giorno come data prima dell'operazione della somma.
Un modo per risolvere questo sarebbe verificare per quei casi e correggere il risultato di conseguenza.Ma mi stavo chiedendo se c'è un modo per disabilitare del tutto la funzionalità diurna di risparmio.
Soluzione
Ho finito per correggerlo io stesso usando 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;
}
.