R 当我们切换到夏时制并返回时的处理日期

R 当我们切换到夏时制并返回时的处理日期,r,datetime,timezone,dst,R,Datetime,Timezone,Dst,我想使用R进行时间序列分析。我想制作一个时间序列模型,并使用来自包timeDate和forecast的函数 我有CET时区的日内数据(15分钟数据,每小时4个数据点)。3月31日夏令时开始实施,我通常拥有的96个数据点中缺少4个数据点。10月28日,由于时间倒转,我有4个数据点太多 对于我的时间序列模型,我总是需要96个数据点,否则日内的季节性就会变得混乱 你有这方面的经验吗?你知道一个R函数或一个包可以帮助自动处理这样的数据吗? 谢谢大家! 如果您不想要夏令时,请转换为没有夏令时的时区(例如G

我想使用R进行时间序列分析。我想制作一个时间序列模型,并使用来自包timeDate和forecast的函数

我有CET时区的日内数据(15分钟数据,每小时4个数据点)。3月31日夏令时开始实施,我通常拥有的96个数据点中缺少4个数据点。10月28日,由于时间倒转,我有4个数据点太多

对于我的时间序列模型,我总是需要96个数据点,否则日内的季节性就会变得混乱

你有这方面的经验吗?你知道一个R函数或一个包可以帮助自动处理这样的数据吗?
谢谢大家!

如果您不想要夏令时,请转换为没有夏令时的时区(例如GMT、UTC)


times我对来自传感器的水文数据也有类似的问题。我的时间戳是UTC+1(CET),没有切换到夏令时(UTC+2,CEST)。由于我不想让我的数据休息一小时(如果使用UTC,情况就是这样),我采用了
strtime
%z
转换规范。在
?strtime
中,您将发现:

%z
以小时和分钟为单位的有符号偏移距UTC,因此-0800是8小时 在UTC之后

例如:2012年,从标准时间到DST的转换发生在2012年3月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"

as.POSIXct.no.dst这里是夏令时偏移-
e、 g.中央夏令时

> Sys.time()
“2015-08-20 07:10:38 CDT”#我在美国/芝加哥白天

> as.POSIXct(as.character(Sys.time()), tz="America/Chicago")
“2015-08-20 07:13:12 CDT”

时差为-5小时

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

一些灵感来自


因此,当您使用函数读入数据时,每天的数据点数量将相同,而如果您使用.POSIXct
,则不会有相同的数据点数量?我看不出这有什么帮助。@GSee,你完全正确,我的回答并不能解决每天观察次数不同的问题。但是如果@Richard也在一个常规系列中出现,这可能会有所帮助。例如:<代码>时间,在不需要时区的情况下,您应该考虑使用类POSIXLT,而您还可以使用常规的时间序列<代码>差异(Struttime(time,格式化=“%f%h:%m”))< /C>。我发现R-News 2004/1中的文章(第29页及以下)很有帮助。这对我没有帮助。我想看看由当地时间触发的日内模式。例如,人们在当地时间08:00上班(冬季是CET,夏季是CEST)。这样做,我输赢各一个小时,我想知道人们是如何解决这个问题的。无论如何,谢谢你的评论。
> as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago")
> as.integer(as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago"))