Als ik een datum als deze heb in Londense tijd: “2009-06-03 19:30”, hoe kan ik deze dan omzetten naar de equivalente tijd aan de westkust van de VS?
Antwoord 1, autoriteit 100%
Pakket lubridate
heeft twee functies om tijdzones om te zetten. Volgens de helppagina’s:
force_tz
retourneert een datum-tijd die dezelfde kloktijd heeft als x
in de nieuwe tijdzone.
force_tz(time, tzone = "America/Los_Angeles")
with_tz
wijzigt de tijdzone waarin een moment wordt weergegeven. De weergegeven kloktijd voor het moment verandert, maar het beschreven tijdstip blijft hetzelfde.
with_tz(time, tzone = "America/Los_Angeles")
Antwoord 2, autoriteit 98%
Gebruik attr()
(base R) of lubridate::with_tz()
(tidyverse) om hetzelfde moment in een andere tijdzone te bekijken.
De interne waarde van een POSIXct-object is altijd in UTC (aantal seconden sinds begin 1970; zie ?DateTimeClasses
, maar de weergegeven tijd bij het afdrukken wordt bepaald door de tzone
attribuut. Verander dus het tzone
attribuut (via attr()
of lubridate::with_tz()
) om hetzelfde weer te geven/af te drukken moment in een andere tijdzone.
Bijvoorbeeld:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
Opmerking tzone-attribuut bepaalt de tijdzone die wordt gebruikt wanneer deze wordt weergegeven/afgedrukt:
attributes(pb.date)$tzone
[1] "Europe/London"
pb.date
[1] "2009-06-03 19:30:00 BST"
Houd er rekening mee dat de interne waarde seconden is sinds de oorsprong in UTC, ongeacht het tzone-kenmerk:
as.numeric(pb.date)
[1] 1244053800
In basis R kan het tzone-attribuut worden ingesteld/gewijzigd met attr()
:
attr(pb.date, "tzone") <- "America/Los_Angeles"
pb.date
[1] "2009-06-03 11:30:00 PDT"
Equivalent, gebruik lubridate::with_tz()
(die ook attr
gebruikt):
pb.date <- lubridate::with_tz(pb.date, "America/Los_Angeles")
Houd er rekening mee dat de weergavetijd nu lokale kloktijd is in PDT:
pb.date
[1] "2009-06-03 11:30:00 PDT"
maar interne waarde is niet veranderd:
as.numeric(pb.date)
[1] 1244053800
dus tzone heeft geen invloed op bewerkingen, alleen de weergegeven waarde wanneer deze wordt afgedrukt.
Antwoord 3, autoriteit 40%
Converteer eerst de Londense tijd naar een POSIXct
object:
pb.txt <- "2009-06-03 19:30"
pb.date <- as.POSIXct(pb.txt, tz="Europe/London")
Gebruik vervolgens format
om de datum in een andere tijdzone af te drukken:
> format(pb.date, tz="America/Los_Angeles",usetz=TRUE)
[1] "2009-06-03 11:30:00 PDT"
Er zijn enkele trucs om de juiste tijdzone-ID te vinden die u wilt gebruiken. Meer details in dit bericht op het Revolutions-blog: Tijdzones converteren in R: tips , trucs en valkuilen
Antwoord 4, autoriteit 12%
Als u dit in één regel wilt doen, bedenk dan dat elk POSIXct
-object in R in feite slechts een getal is (seconden UTC sinds het begin van het tijdperk), en dat de “tijdzone” slechts een attribuut dat bepaalt hoe dat nummer wordt afgedrukt.
Daarom kunnen we de .POSIXct
-helperfunctie als volgt gebruiken:
x = as.POSIXct("2009-06-03 19:30", tz = "Europe/London")
.POSIXct(as.integer(x), tz = 'America/Los_Angeles')
# [1] "2009-06-03 11:30:00 PDT"
as.integer
verwijdert de klasse en attributen van x
, en .POSIXct
is een afkorting voor het construeren van een POSIXct-object; als uw object milliseconden heeft en u deze wilt bijhouden, kunt u as.numeric(x)
gebruiken.