2011-11-04 13 views
7

I dati delle serie temporali sono stati ottenuti da un data logger impostato su un fuso orario senza risparmio di luci diurne (NZST o UTC + 12: 00) e i dati si estende qualche anno. I data logger non prendono in considerazione le modifiche all'ora legale e sono sincronizzati con l'ora locale con/senza ora legale (a seconda di chi lo ha distribuito).Data/ora di importazione in un fuso orario specificato, non rispetta ora diurna

Tuttavia, quando si immettono i dati in R, non è possibile utilizzare correttamente as.POSIXct per ignorare l'ora legale. Sto usando R 2.14.0 su un computer Windows con queste impostazioni:

> Sys.timezone() 
[1] "NZDT" 
> Sys.getlocale("LC_TIME") 
[1] "English_New Zealand.1252" 

Qui ci sono tre timestamp in tutto il cambiamento primavera DST, ciascuno sono distanziati uno ora a parte:

> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00") 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="") 
[1] "2008-09-28 01:00:00 NZST" NA 
[3] "2008-09-28 03:00:00 NZDT" 
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC") 
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC" 
[3] "2008-09-28 03:00:00 UTC" 

come si può vedere, gli orologi sono saltati in avanti 1:59 alle 3:00, quindi 2:00 non è valido, quindi NA. Inoltre, posso usare tz="UTC" per far sì che ignori le modifiche all'ora legale. Tuttavia, preferirei mantenere il fuso orario corretto poiché ho registrato altre serie di dati con DST (NZDT o UTC + 13: 00) che mi piacerebbe fondere (via merge) per la mia analisi.

Come configurare il parametro tz su un computer MS Windows? Ho provato molte cose, come "NZST", "New Zealand Standard Time", "UTC + 12: 00", "+1200", ecc., Ma senza fortuna. O modifico qualche altra impostazione?

+2

È possibile utilizzare 'tz =" Etc/GMT + 12 "' – James

+0

@James, perché non si ottiene una risposta? –

+0

@BenBolker Lo farà, basta aggiungere un abbellimento adatto per superare il limite di caratteri – James

risposta

7

È possibile utilizzare tz="Etc/GMT+12":

as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12") 
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12" 
[3] "2008-09-28 03:00:00 GMT+12" 

Per un elenco completo dei fusi orari disponibili usare,

dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE) 

ci sono un paio di file di .tab in là, che non sono fusi orari, ma tiene alcune informazioni, ma il mio regex-fu non è abbastanza buono per essere in grado di escluderle con l'argomento pattern su dir.

1

Se si aggiunge solo 12 * 60 * 60 a quel vettore derivato UTC, si avrà il tempo "standard" locale.

+0

12 ore? Intendi 1 ora? cioè 60 * 60 –

+0

Vuoi UTC + 12 anche se non è vero? – James

+0

@Mike Toews. Pensavo avessi 12 ore di anticipo rispetto all'UTC –

Problemi correlati