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

10
我有一些时间序列数据,是从一个设置为不考虑夏令时的时区(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"

以下是春季夏令时变更期间的三个时间戳,每个时间戳相隔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混合进行分析。

如何在MS Windows计算机上配置tz参数?我尝试了许多方法,例如“NZST”,“新西兰标准时间”,“UTC + 12:00”,“+1200”等,但没有成功。还是我修改了其他设置?

2个回答

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文件,它们不是时区文件,而是保存一些信息的文件。但是我的正则表达式技巧不足以通过pattern参数从dir命令中排除它们。


1

如果只是将12*60*60添加到那个UTC派生向量中,你就会得到本地的“标准”时间。


12小时?你是指1小时吗?即60*60。 - Mike T
你想要UTC+12对吗? - James
@Mike Toews。我以为你比UTC提前12个小时。 - IRTFM
啊,我明白了,是的,现在有意义了。 - Mike T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接