我在Debian中使用R已有5年了,我一直将其设置tz()
为“ SG”(对于“新加坡”)。当我将代码移植到Windows 8.1(安装有最新的R
3.6.0和lubridate
1.7.4)时,遇到以下错误:
> library(lubridate)
> a <- Sys.time()
> tz(a) <- "SG"
Error in C_force_tz(time, tz = tzone, roll) :
CCTZ: Unrecognized output timezone: "SG"
我的调查
使用我的Debian VM,我lubridate
从v1.6.0(一直运行良好)更新到最新的v1.7.4,确实如此,它显示了相同的错误。
以为我已经找到了该错误,所以我回到Windows并安装了lubridate 1.6.0,但是请放心!它遇到了类似的错误:
> library(lubridate)
> a <- Sys.time()
> tz(a)<-"SG"
Warning messages:
1: In as.POSIXct.POSIXlt(lt) : unknown timezone 'SG'
2: In as.POSIXlt.POSIXct(ct) : unknown timezone 'SG'
我的问题
自然,我的问题是:(i)当我升级lubridate
到v1.7.4时,为什么在Debian中会发生上述错误?(ii)如何使用lubridate v1.6.0或v1.7.4解决Windows中的错误?
最后我检查了一下,新加坡仍然是一个国家/地区,根据Microsoft默认时区,新加坡的时区为'SG'(页面中间)。
这些年来,我从未完全了解日期/时间和时区。希望有人比我聪明可以帮助启发。
系统信息
# Windows 8.1 (where the error occurred)
R: 3.6.0 (64-bit)
lubridate: both 1.6.0 and 1.7.4 give error
# Debian Jessie
R: 3.3.3 (64-bit)
lubridate: 1.6.0 (NO error) and 1.7.4 (has error)
您可以从该OlsonNames()
函数中获取“官方”时区名称列表。看起来像“ SG”这样的国家/地区代码似乎不在该列表中,而“ Singapore”却如此。所以你可以做
tz(a) <- "Singapore"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句