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ż)