我从数据记录器获取了时间序列数据,该数据记录器设置为一个没有夏令时的时区(NZST 或 UTC+12:00),并且数据跨度数年。数据记录器不考虑 DST 更改,并且会同步到带/不带 DST 的本地时间(取决于部署者)。
但是,当我将数据输入R时,我无法正确使用as.POSIXct
忽略夏令时。我在 Windows 计算机上使用 R 2.14.0,设置如下:
> Sys.timezone()
[1] "NZDT"
> Sys.getlocale("LC_TIME")
[1] "English_New Zealand.1252"
以下是 Spring DST 更改的三个时间戳,每个时间戳间隔 1 小时:
> ts_str <- c("28/09/2008 01:00", "28/09/2008 02:00", "28/09/2008 03:00")
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="")
[1] "2008-09-28 01:00:00 NZST" NA
[3] "2008-09-28 03:00:00 NZDT"
> as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="UTC")
[1] "2008-09-28 01:00:00 UTC" "2008-09-28 02:00:00 UTC"
[3] "2008-09-28 03:00:00 UTC"
正如您所看到的,时钟从 1:59 向前跳到 3:00,因此 2:00 无效,因此 NA。此外,我可以使用tz="UTC"
让它忽略 DST 更改。但是,我宁愿保留正确的时区,因为我还想混合其他用 DST(NZDT 或 UTC+13:00)记录的数据系列(通过 merge
)供我分析。
如何配置 tz
MS Windows 计算机上的参数?我尝试过很多东西,例如“NZST”、“新西兰标准时间”、“UTC+12:00”、“+1200”等,但没有运气。或者我是否需要修改其他一些设置?
最佳答案
您可以使用tz="Etc/GMT+12"
:
as.POSIXct(ts_str, format="%d/%m/%Y %H:%M", tz="Etc/GMT+12")
[1] "2008-09-28 01:00:00 GMT+12" "2008-09-28 02:00:00 GMT+12"
[3] "2008-09-28 03:00:00 GMT+12"
有关可用时区的完整列表,
dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE)
其中有几个 .tab 文件不是时区,但包含一些信息,但我的 regex-fu 不够好,无法使用 dir< 的模式参数排除它们
.
关于r - 导入指定时区的日期时间,忽略夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004050/