-->

处理日期时,我们切换到夏令时,并回(Handling dates when we switch to

2019-07-05 05:17发布

我想用R进行时间序列分析。 我想打从包TIMEDATE和预测的时间序列模型和使用功能。

我在CET时区数据盘中(15分钟的数据,每小时4个数据点)。 3月31日夏令时间实现,我错过了96,我通常有4个数据点。 10月28日我有4个数据点太多,因为时间很转回。

对于我的时间序列模型我总是需要96个数据点,否则盘中季节性得到弄糟。

你有任何这方面的经验? 你知道的R函数或将是帮助自动售货机等数据处理包 - 这是优雅? 谢谢!

Answer 1:

我曾与来​​自传感器的水文资料有类似的问题。 我的时间戳在UTC + 1(CET),并没有切换到夏令时(UTC + 2,CEST)。 因为我不希望我的数据是一个小时(这将是UTC,如果使用的情况下)我拿了%z的转换规范strptime 。 在?strptime你会发现:

%z签名在从UTC小时和分钟的偏移,所以-0800比UTC 8小时。

例如:在2012年,从标准时间到DST开关发生在2012-03-25,所以今天没有02:00。 如果你尝试“2012-03-25 02:00:00”转换为POSIXct对象时,

> as.POSIXct("2012-03-25 02:00:00", tz="Europe/Vienna")
[1] "2012-03-25 CET"

你没有得到一个错误或警告,你只能日期没有时间(这种行为记录)。

使用format = "%z"给出所期望的结果:

> as.POSIXct("2012-03-25 02:00:00 +0100", format="%F %T %z", tz="Europe/Vienna")
[1] "2012-03-25 03:00:00 CEST"

为了促进这一进口,我写了适当的默认值的一个小功能:

as.POSIXct.no.dst <- function (x, tz = "", format="%Y-%m-%d %H:%M", offset="+0100", ...)
{
  x <- paste(x, offset)
  format <- paste(format, "%z")
  as.POSIXct(x, tz, format=format, ...)
}

> as.POSIXct.no.dst(c("2012-03-25 00:00", "2012-03-25 01:00", "2012-03-25 02:00", "2012-03-25 03:00"))
[1] "2012-03-25 00:00:00 CET"  "2012-03-25 01:00:00 CET"  "2012-03-25 03:00:00 CEST"
[4] "2012-03-25 04:00:00 CEST"


Answer 2:

如果你不想夏令时,转换为没有它(例如GMT,UTC)时区。

times <- .POSIXct(times, tz="GMT")


Answer 3:

这里越来越夏令时间偏移 - 例如中部夏令时

> Sys.time()

“2015年8月20日7时10分38秒CDT”#我在美国/芝加哥夏令时

> as.POSIXct(as.character(Sys.time()), tz="America/Chicago")

“2015年8月20日7时13分12秒CDT”

> as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago")

-5个小时的时差

> as.integer(as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago"))

-5

有些灵感来自

R中转换时区:提示,技巧和陷阱



文章来源: Handling dates when we switch to daylight savings time and back