Wie konvertiere ich richtig Zeitzonen

Ich benutze dieschnelle Zeit Paket für seinefastPOSIXct Funktion, die Zeichendaten sehr effizient lesen kann. Mein Problem ist, dass es nur Zeichendaten lesen kann, die in GMT ausgedrückt werden.

R) fastPOSIXct("2010-03-15 12:37:17.223",tz="GMT") #very fast
[1] "2010-03-15 12:31:16.223 GMT"
R) as.POSIXct("2010-03-15 12:37:17.223",tz="GMT") #very slow
[1] "2010-03-15 12:31:16.223 GMT"

Angenommen, ich habe eine Datei mit Datumsangaben in der Zeitzone "America / Montral". Der Plan besteht darin, sie zu laden (implizit so zu tun, als wären sie in GMT) und anschließend das Zeitzonenattribut zu ändern, ohne den zugrunde liegenden Wert zu ändern.

Wenn ich diese Funktion benutze, wird in einem anderen Beitrag darauf verwiesen:

forceTZ = function(x,tz){   
    return(as.POSIXct(as.numeric(x), origin=as.POSIXct("1970-01-01",tz=tz), tz=tz))
}

Ich sehe einen Fehler ...

R) forceTZ(as.POSIXct("2010-03-15 12:37:17.223",tz="GMT"),"America/Montreal")
    [1] "2010-03-15 13:37:17.223 EDT"

... weil ich es gerne hätte

R) as.POSIXct("2010-03-15 12:37:17.223",format="%Y-%m-%d %H:%M:%OS",tz="America/Montreal")
    [1] "2010-03-15 12:37:17.223 EDT"

Gibt es eine Problemumgehung?

EDIT: Ich weiß überlubridate::force_tz aber es ist zu langsam (nicht Punkt mitfasttime::fastPOSIXct nicht mehr )

Antworten auf die Frage(3)

Ihre Antwort auf die Frage