Domanda

voglio sottrarre 1 giorno da una data POSIX e finiscono allo stesso tempo, intorno l'ora legale.

Per esempio, quando aggiungo un giorno:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

Ma quando vado passato, si compensa:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

Qual è il modo migliore per affrontare le differenze di tempo assolute intorno DST? Di solito mi occupo di questo convertendo i tempi in stringhe e trattare con loro separatamente, in modo che l'ora legale non viene applicata.

È stato utile?

Soluzione

Il codice sta facendo esattamente quello che hai chiesto di fare, perché non ha chiesto per aggiungere o sottrarre un giorno, lei ha chiesto per aggiungere o sottrarre 24 ore . 24 ore (86400 secondi) prima 2009-03-08 23:00:00 EDT è 2009-03-07 22:00:00 EST. Non ho dimestichezza con le librerie R, ma mi è familiare con le funzioni POSIX che avvolgono. Se si prende un POSIXct, diminuire la sua proprietà day da 1, e poi "ri-cast" a POSIXct via POSIXlt (per garantire che -1 ° ad esempio febbraio diventa 31 gennaio) allora si dovrebbe essere in grado di sottrarre uno giorno in modo affidabile.

Altri suggerimenti

datetimes Store come UTC - o in questo caso si convertono in UTC sottrarre un giorno e converte di nuovo a tempo locale. (Questo ignora secondo salto)

Grazie Hobbs! Ho bisogno di fare un po 'di lavoro con esso, ma sottraendo dalla fessura giorno lavora in POSIXlt:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

Se si desidera solo per contare i giorni, è possibile utilizzare trunc per spostare solo il giorno:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

Il lubridate pacchetto fornisce due classi TimeSpan addizionali che specificano cosa è un po 'poco chiaro nel pacchetto base. Da manuale tha:

Durate

Durate misurare l'esatta quantità di tempo che si verifica tra due istanti. Questo può creare risultati imprevisti in relazione ai tempi di clock se un secondo intercalare, anno bisestile, o il cambiamento di ora legale (DST) si verifica nell'intervallo.

Periodi

I periodi misurano il cambiamento nel tempo di orologio che si verifica tra due istanti. Periodi di fornire previsioni affidabili di tempo dell'orologio in presenza di secondo salto, gli anni bisestili, e cambiamenti nella DST.

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