Jak przekonwertować poprawnie strefy czasowe

Używamszybki czas pakiet dla jegofastPOSIXct funkcja, która bardzo skutecznie odczytuje czasy danych znaków. Mój problem polega na tym, że może on odczytywać tylko dane znaków, KTÓRE SĄ WYRAŻONE W GMT.

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"

Teraz, powiedzmy, że mam plik z czasami danych wyrażonymi w strefie czasowej „America / Montral”, planuje się załadować je (w sposób udawany, że są w GMT) i następnie zmodyfikować atrybut strefy czasowej bez zmiany wartości bazowej.

Jeśli korzystam z tej funkcji, odwołałem się w innym poście:

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

Widzę błąd ...

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

... ponieważ chciałbym, żeby tak było

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"

Czy jest w pobliżu praca ?

EDYCJA: Wiem olubridate::force_tz ale jest zbyt wolny (nie używaj punktufasttime::fastPOSIXct już)

questionAnswers(3)

yourAnswerToTheQuestion