Como faço para converter corretamente fusos horários
Estou usando oTempo rápido pacote para o seufastPOSIXct
função que pode ler os dados dos caracteres com muita eficiência. Meu problema é que ele só pode ler dados de caracteres que são expressos em 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"
Agora, digamos que eu tenha um arquivo com tempos de dados expressos no fuso horário "America / Montral", o plano é carregá-los (implicitamente fingindo que estão em GMT) e modificando subseqüentemente o atributo timezone sem alterar o valor subjacente.
Se eu usar essa função, referenciada em outro post:
forceTZ = function(x,tz){
return(as.POSIXct(as.numeric(x), origin=as.POSIXct("1970-01-01",tz=tz), tz=tz))
}
Eu estou vendo um bug ...
R) forceTZ(as.POSIXct("2010-03-15 12:37:17.223",tz="GMT"),"America/Montreal")
[1] "2010-03-15 13:37:17.223 EDT"
... porque eu gostaria que fosse
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"
Existe uma solução alternativa?
EDIT: eu sei sobrelubridate::force_tz
mas é muito lento (não aponte usandofasttime::fastPOSIXct
não mais )