Как правильно конвертировать часовые пояса
Я используюfasttime пакет для егоfastPOSIXct
функция, которая может читать символьные даты очень эффективно. Моя проблема в том, что он может читать только символьные даты, которые выражены в 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"
Теперь, скажем, у меня есть файл с датами и временем, выраженными в часовом поясе «Америка / Монраль», план состоит в том, чтобы загрузить их (неявно притворяясь, что они в GMT) и впоследствии изменив атрибут часового пояса без изменения базового значения.
Если я использую эту функцию, упоминается в другом посте:
forceTZ = function(x,tz){
return(as.POSIXct(as.numeric(x), origin=as.POSIXct("1970-01-01",tz=tz), tz=tz))
}
Я вижу ошибку ...
R) forceTZ(as.POSIXct("2010-03-15 12:37:17.223",tz="GMT"),"America/Montreal")
[1] "2010-03-15 13:37:17.223 EDT"
... потому что я хотел бы, чтобы это было
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"
Есть ли обходной путь?
РЕДАКТИРОВАТЬ: я знаю оlubridate::force_tz
но это слишком медленноfasttime::fastPOSIXct
больше)