【问题标题】:Import date-time at a specified timezone, disregard Daylight Savings Time在指定时区导入日期时间,忽略夏令时
【发布时间】:2011-12-21 16:31:03
【问题描述】:

我从数据记录器中获得时间序列数据,该数据记录器设置为一个没有夏令时的时区(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 无效,因此不适用。此外,我可以使用 tz="UTC" 让它忽略 DST 更改。但是,我宁愿保留正确的时区,因为我有其他数据系列记录 DST(NZDT 或UTC+13:00),我想融入(通过merge)供我分析。

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

【问题讨论】:

    标签: r datetime timezone time-series dst


    【解决方案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 文件不是时区但包含一些信息,但我的 regex-fu 不够好,无法使用 dir 的模式参数排除它们。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 12 小时?你的意思是1小时?即 60*60
      • 你想要 UTC+12 不是吗?
      • @Mike Toews。我以为你比 UTC 早 12 小时
      • 啊,我明白了,是的,现在说得通了
      猜你喜欢
      • 2013-09-03
      • 2012-04-07
      • 1970-01-01
      • 2018-08-22
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多