我正在使用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
)