基础R中的CET / CEST夏令时检测程序

时间:2016-12-14 17:10:29

标签: r dst

我正在处理众所周知的夏令时问题,这可能是一个重复。我可以找到this这对我的问题没有多大帮助。我的另一个问题是,我在时间步"2015-10-25 02:00:00"的第二次出现时有数据缺口。这似乎是问题,导致在"2015-10-25 03:00:00"

一小时后切换到CET

将有关重新启动R会话的示例数据发送给我,这会产生不同的结果......

新会议上的测试数据:

Sys.setenv(TZ="Europe/Berlin")

ts1 <- c(seq(as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin"), by = 600, length.out = 12 ))
ts2 <- c(seq(as.POSIXct("2015-10-25 01:40:00", tz="Europe/Berlin"), by = 1200, length.out = 9 ))
ts3 <- ts2[c(1,2,3,4,6,7,8,9)]

正在给予:

> ts1
 [1] "2015-10-25 02:00:00 CET" "2015-10-25 02:10:00 CET" "2015-10-25 02:20:00 CET"
 [4] "2015-10-25 02:30:00 CET" "2015-10-25 02:40:00 CET" "2015-10-25 02:50:00 CET"
 [7] "2015-10-25 03:00:00 CET" "2015-10-25 03:10:00 CET" "2015-10-25 03:20:00 CET"
 [10] "2015-10-25 03:30:00 CET" "2015-10-25 03:40:00 CET" "2015-10-25 03:50:00 CET"

> ts2
 [1] "2015-10-25 01:40:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:20:00 CEST"
 [4] "2015-10-25 02:40:00 CEST" "2015-10-25 02:00:00 CET"  "2015-10-25 02:20:00 CET" 
 [7] "2015-10-25 02:40:00 CET"  "2015-10-25 03:00:00 CET"  "2015-10-25 03:20:00 CET" 

> ts3
 [1] "2015-10-25 01:40:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:20:00 CEST"
 [4] "2015-10-25 02:40:00 CEST" "2015-10-25 02:20:00 CET"  "2015-10-25 02:40:00 CET" 
 [7] "2015-10-25 03:00:00 CET"  "2015-10-25 03:20:00 CET" 

再次运行之后

ts1 <- c(seq(as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin"), by = 600, length.out = 12 ))

获得

> ts1
 [1] "2015-10-25 02:00:00 CEST" "2015-10-25 02:10:00 CEST" "2015-10-25 02:20:00 CEST"
 [4] "2015-10-25 02:30:00 CEST" "2015-10-25 02:40:00 CEST" "2015-10-25 02:50:00 CEST"
 [7] "2015-10-25 02:00:00 CET"  "2015-10-25 02:10:00 CET"  "2015-10-25 02:20:00 CET" 
 [10] "2015-10-25 02:30:00 CET"  "2015-10-25 02:40:00 CET"  "2015-10-25 02:50:00 CET" 

最后,这个

ts4 = c(as.POSIXct("2015-10-25 01:40:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:20:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:40:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:20:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 02:40:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 03:00:00", tz="Europe/Berlin"),
        as.POSIXct("2015-10-25 03:20:00", tz="Europe/Berlin"))

导致

> ts4
 [1] "2015-10-25 01:40:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:20:00 CEST"
 [4] "2015-10-25 02:40:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:20:00 CEST"
 [7] "2015-10-25 02:40:00 CEST" "2015-10-25 03:00:00 CET"  "2015-10-25 03:20:00 CET" 

如您所见,第二轮ts1正在提供正确的DST。这使得重现性变得一团糟。实际上只是ts4有点复制我的问题。但是在我的真实数据中,我在"2015-10-25 02:00:00"的第二个数据可能不是问题...我希望这是众所周知的,并且有人有解决方案。我很感激基础R解决方案。

编辑:

所以这似乎是问题的核心:

Restarting R session...

> as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin")
[1] "2015-10-25 02:00:00 CET"
> as.POSIXct("2015-10-25 01:40:00", tz="Europe/Berlin")
[1] "2015-10-25 01:40:00 CEST"
> as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin")
[1] "2015-10-25 02:00:00 CEST"
> rm(list = ls())
> as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin")
[1] "2015-10-25 02:00:00 CEST"
> as.POSIXct("2015-10-25 03:00:00", tz="Europe/Berlin")
[1] "2015-10-25 03:00:00 CET"
> as.POSIXct("2015-10-25 02:00:00", tz="Europe/Berlin")
[1] "2015-10-25 02:00:00 CET"
  • as.POSIXct背后的例程是什么?我在哪里可以找到它?
  • 关于R存储的信息在哪里决定2:00是CET还是CEST?
  • 为什么这可能会在很长一段时间内失败?关于相同的时间序列ts2(定义为序列 - >正确的DST)和ts4(单个分量矢量 - >不正确的DST)

0 个答案:

没有答案