Comment convertissez-vous les dates / heures d'un fuseau horaire à un autre dans R?
Si j'ai une date comme celle-ci à L'Heure de Londres: "2009-06-03 19: 30", Comment puis-je la convertir en heure équivalente sur la côte ouest des États-Unis?
4 réponses
Change l'attribut tzone d'un objet '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"
Notez qu'il s'agit toujours D'un objet POSIXct, que tzone a changé et que le décalage correct a été appliqué:
> attributes(pb.date)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] "America/Los_Angeles"
Package lubridate
contient deux fonctions pour convertir les fuseaux horaires. Selon les pages d'aide:
force_tz
retourne une date-heure qui a la même heure que x
dans le nouveau fuseau horaire.
force_tz(time, tzone = "America/Los_Angeles")
with_tz
modifie le fuseau horaire dans lequel un instant est affiché. L'heure d'horloge affichée pour l'instant change, mais le moment de temps décrit reste le même.
with_tz(time, tzone = "America/Los_Angeles")
Tout d'abord, convertissez L'Heure de Londres en un objet POSIXct
:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
, Puis utilisez format
pour imprimer la date dans un autre fuseau horaire:
> format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"
Il y a quelques astuces pour trouver le bon identifiant de fuseau horaire à utiliser. Plus de détails dans ce post sur le blog Revolutions: conversion des fuseaux horaires en R: Trucs, Astuces et pièges
Si vous souhaitez le faire en une ligne, rappelez-vous que tout objet POSIXct
dans R n'est vraiment qu'un nombre (secondes UTC depuis le début de l'époque), et que le "fuseau horaire" est juste un attribut qui détermine comment ce nombre est imprimé.
, par conséquent, nous pouvons utiliser structure
comme suit:
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
les bandes de la classe et les attributs de x
, et structure
nous permet de reconstruire/personnaliser ces. {[6] } est un raccourci pour c('POSIXct', 'POSIXt')
; Si votre objet a des millisecondes et que vous souhaitez garder une trace parmi eux, vous pouvez utiliser as.numeric(x)
.