2011-11-04 16 views
7

Tengo datos de series de tiempo obtenidos de un registrador de datos que se configuró en una zona horaria sin ahorros (NZST o UTC + 12: 00) y los datos abarcan unos años. Los registradores de datos no consideran los cambios de horario de verano, y están sincronizados con la hora local con/sin horario de verano (dependiendo de quién lo implementó).Importar fecha-hora en una zona horaria específica, sin tener en cuenta el horario de verano

Sin embargo, cuando obtengo los datos en R, no puedo usar correctamente as.POSIXct para ignorar el horario de verano. Estoy usando R 2.14.0 en un ordenador Windows con estos valores:

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

Aquí hay tres marcas de tiempo a través del cambio de horario de verano primavera, cada queden situados a 1 hora de diferencia:

> 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" 

Como se puede mira, los relojes saltaron hacia adelante a la 1:59 a las 3:00, entonces 2:00 no es válido, por lo tanto, NA. Además, puedo usar tz="UTC" para hacer que ignore los cambios del horario de verano. Sin embargo, prefiero mantener el huso horario correcto ya que tengo otras series de datos registradas con DST (NZDT o UTC + 13: 00) que me gustaría combinar (a través de merge) para mi análisis.

¿Cómo configuro el parámetro tz en una computadora MS Windows? He intentado muchas cosas, como "NZST", "Hora estándar de Nueva Zelanda", "UTC + 12: 00", "+1200", etc., pero no tuve suerte. ¿O modifico alguna otra configuración?

+2

Podría usar 'tz =" Etc/GMT + 12 "' – James

+0

@James, ¿por qué no hace que una respuesta? –

+0

@BenBolker ¿Lo hará, solo necesita agregar un adorno adecuado para superar el límite de caracteres – James

Respuesta

7

Puede utilizar 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" 

Para obtener una lista completa de zonas horarias disponibles utilizar,

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

Hay un par de archivos de .tab ahí que no son zonas horarias, pero mantiene algo de información, pero mi regex-fu no es lo suficientemente buena para poder excluirlos con el argumento de patrón a dir.

1

Si solo agrega 12 * 60 * 60 a ese vector derivado UTC, tendrá la hora "estándar" local.

+0

12 horas? ¿Te refieres a 1 hora? es decir, 60 * 60 –

+0

¿Desea UTC + 12 aunque no? – James

+0

@Mike Toews. Pensé que estabas 12 horas adelante de UTC –

Cuestiones relacionadas