Как правильно конвертировать часовые пояса

Я использую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 больше)

Ответы на вопрос(3)

Ваш ответ на вопрос