关于R:在指定时区导入日期时间,忽略夏令时

Import date-time at a specified timezone, disregard Daylight Savings Time

我有从一个数据记录器中获得的时间序列数据,它被设置为一个没有夏令时的时区(nzst或utc+12:00),数据跨越几年。数据记录器不考虑DST更改,并与本地时间同步(有/无DST)(取决于部署者)。

但是,当我将数据输入r时,我不能正确地使用as.POSIXct来忽略dst。我正在Windows计算机上使用R 2.14.0,其设置如下:

1
2
3
4
> Sys.timezone()
[1]"NZDT"
> Sys.getlocale("LC_TIME")
[1]"English_New Zealand.1252"

以下是弹簧DST变化的三个时间戳,每个时间戳间隔1小时:

1
2
3
4
5
6
7
> 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混合)用于我的分析。

如何在MS Windows计算机上配置tz参数?我试过很多东西,比如"nzst"、"新西兰标准时间"、"UTC+12:00"、"+1200"等等,但没有运气。还是修改其他设置?


您可以使用tz="Etc/GMT+12"

1
2
3
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"

要获得可用时区的完整列表,请使用,

1
dir(file.path(R.home("share"),"zoneinfo"), recursive=TRUE)

其中有几个.tab文件不是时区,但包含一些信息,但我的regex fu不够好,无法用dir的模式参数排除它们。


如果只将12*60*60添加到该UTC派生向量,您将得到本地"标准"时间。