separar - ¿Cómo se convierten las fechas/horas de una zona horaria a otra en R?
ordenar fechas en r (4)
Si tengo una fecha como esta en Londres: "2009-06-03 19:30", ¿cómo puedo convertirla a la hora equivalente en la costa oeste de EE. UU.?
Cambie el atributo tzone de un objeto ''POSIXct'':
> pb.txt <- "2009-06-03 19:30"
> pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
> attributes(pb.date)$tzone <- "America/Los_Angeles"
> pb.date
[1] "2009-06-03 11:30:00 PDT"
Tenga en cuenta que este sigue siendo un objeto POSIXct, tzone ha cambiado y se ha aplicado el desplazamiento correcto:
> attributes(pb.date)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "America/Los_Angeles"
El paquete lubridate
tiene dos funciones para convertir zonas horarias. De acuerdo con las páginas de ayuda:
force_tz
devuelve una fecha-hora que tiene el mismo tiempo de reloj que x
en la nueva zona horaria.
force_tz(time, tzone = "America/Los_Angeles")
with_tz
cambia la zona horaria en la que se muestra un instante. La hora del reloj que se muestra para el instante cambia, pero el momento del tiempo descrito sigue siendo el mismo.
with_tz(time, tzone = "America/Los_Angeles")
Primero, convierta la hora de Londres en un objeto POSIXct
:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
Luego use el format
para imprimir la fecha en otra zona horaria:
> format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"
Hay algunos trucos para encontrar el identificador de zona horaria correcto para usar. Más detalles en este post en el blog de Revolutions: Conversión de zonas horarias en R: consejos, trucos y trampas
Si desea hacer esto en una línea, recuerde que cualquier objeto POSIXct
en R es realmente solo un número (segundos UTC desde inicio de época), y que la "zona horaria" es solo un atributo que determina cómo se imprime ese número.
Por lo tanto, podemos usar la structure
siguiente manera:
x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
structure(as.integer(x), class = class(x), tzone = ''America/Los_Angeles'')
# [1] "2009-06-03 11:30:00 PDT"
as.integer
quita la clase y los atributos de x
, y la structure
nos permite reconstruir / personalizar estos. class(x)
es la abreviatura de c(''POSIXct'', ''POSIXt'')
; si su objeto tiene milisegundos y desea realizar un seguimiento de ellos, puede usar as.numeric(x)
.