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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top