2012-08-13 13 views
6

Ho una serie di timestamp di caratteri in R. Quando cambio la loro classe in POSIXct utilizzando metodi intuitivi, R assegna il fuso orario ambiguo EST.fusi orari in R: come evitare termini ambigui come EST?

Ad esempio:

as.POSIXct("2012-08-06 15:32:00") 
as.POSIXct("2012-08-06 15:32:00", tz = "Australia/Brisbane") 
as.POSIXct("2012-08-06 15:32:00", tz = "") 

tutti producono lo stesso output sul mio due scatole (Mac e Windows):

"2012-08-06 15:32:00 EST" 

Il problema qui è EST potrebbe essere un qualsiasi numero di fusi orari: Eastern Standard Tempo negli Stati Uniti, o Australian Eastern Standard Time, o un altro fuso orario in Canada (da ?timezone):

Attenzione che alcune di queste designazioni potrebbero non essere ciò che pensate: in particolare EST è un fuso orario utilizzato in Canada senza ora legale , e non EST5EDT né (Australiano) Eastern Standard Time.

C'è un metodo per impostare il fuso orario che evita questa etichetta EST. Si fa riferimento, ma non completamente spiegato nella guida R ?timezone. Impostazione x come il tempo dello sbarco Curiosity su Marte come riferito da un Australian news service:

x <- as.POSIXct("2012-08-06 15:32:00", tz = "Etc/GMT-10") 
x 
"2012-08-06 15:32:00 GMT-10" 

E possiamo verificare che questo è corretto convertendolo in un fuso orario degli Stati Uniti e il controllo con un Californian news report:

y <- format(x, tz = "America/Los_Angeles") 
y 
"2012-08-05 22:32:00" 

Se si utilizza questo Etc/GMT+n o Etc/GMT-n notazione, si prega di attenzione al seguente avvertimento da ?timezone:

Molti i sistemi supportano fusi orari della forma GMT + n e GMT-n, che sono a un offset fisso da UTC (quindi senza DST). Contrariamente ad alcuni usi (ma coerenti con nomi come PST8PDT), gli offset negativi sono i tempi prima di (est di) UTC, gli offset positivi sono le ore indietro (a ovest di) UTC.

+0

appena trovato questo [domanda relativa & risposta] (http://stackoverflow.com/a/8011954/1265353) – sfuj

+2

C'è un SO 'migliori pratiche' per la gestione di/orario che possono aiutare con il concettuale lato delle cose: http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone- best-practice. – Thell

risposta

6

Il 1 ° e 3 ° linee nel primo esempio produrre la stessa uscita, perché tz="" è il valore predefinito per as.POSIXct. La seconda riga è più interessante perché il fuso orario è definito in modo esplicito.

Tuttavia, notare che "EST" è solo il modo in cui il fuso orario viene stampato per impostazione predefinita. L'attributo tzone è ancora non ambiguo.

R> x <- as.POSIXct("2012-08-06 15:32:00", tz="Australia/Brisbane") 
R> x 
[1] "2012-08-06 15:32:00 EST" 
R> attr(x, "tzone") 
[1] "Australia/Brisbane" 
+0

Grazie Josh. Questo è tutto ciò di cui volevo essere sicuro. – sfuj