在指定时区导入日期时间,忽略夏令时

时间:2011-11-04 01:45:14

标签: r datetime timezone time-series dst

我从数据记录器获取的时间序列数据被设置为一个时区而没有夏令时(NZST或UTC + 12:00),并且数据跨越了几年。数据记录器不考虑DST更改,并且在有/无DST的情况下同步到本地时间(取决于部署它的人员)。

但是,当我将数据导入R时,我无法正确使用as.POSIXct来忽略DST。我在具有这些设置的Windows计算机上使用R 2.14.0:

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

以下是春季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),我想融入其中(通过{{1} })我的分析。

如何在MS Windows计算机上配置merge参数?我尝试过很多东西,比如“NZST”,“新西兰标准时间”,“UTC + 12:00”,“+ 1200”等,但没有运气。或者我是否修改了其他一些设置?

2 个答案:

答案 0 :(得分:9)

您可以使用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文件不是时区但有一些信息,但我的正则表达式不够好,无法用dir的模式参数排除它们

答案 1 :(得分:1)

如果只为该UTC派生矢量添加12 * 60 * 60,您将拥有本地“标准”时间。