R:“ lubridate”在Windows中无法识别时区“ SG”

时间:2019-04-30 14:27:31

标签: r timezone lubridate

我在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 Default Timezones,新加坡的时区为“ 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)

1 个答案:

答案 0 :(得分:1)

您可以从OlsonNames()函数中获取“官方”时区名称列表。看起来像“ SG”这样的国家/地区代码似乎不在该列表中,但是“ Singapore”却如此。所以你可以做

tz(a) <- "Singapore"