首页 文章

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

提问于
浏览
9

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

但是,当我将数据输入R时,我无法正确使用 as.POSIXct 来忽略DST . 我在具有以下设置的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 )进行分析 .

如何在MS Windows计算机上配置 tz 参数?我尝试了很多东西,比如"NZST","New Zealand Standard Time","UTC+12:00","+1200"等,但没有运气 . 或者我修改其他一些设置?

2 回答

  • 1

    你可以使用 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 的模式参数排除它们 .

  • 9

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

相关问题