R中的时区问题,我想使用UTC + 0100,即使在夏天,虽然CET会自动切换到CEST

时间:2016-05-04 12:44:30

标签: r timezone dst timezone-offset lubridate

我在" CET"中获得了POSIXct时间戳的一些数据。 (中欧时间=冬令时= UTC + 0100)和" CEST" (中欧夏令时= UTC + 0200)。由于夏令时因为我的情节和计算有问题,我希望所有的时间戳都在UTC + 0100时间。

以下是关于切换回冬季时间的时间戳的示例:

> tdf$time_posix_vec[1:20]
[1] "2015-10-25 00:00:00 CEST" "2015-10-25 00:15:00 CEST" "2015-10-25 00:30:00 CEST" "2015-10-25 00:45:00 CEST" "2015-10-25 01:00:00 CEST"
 [6] "2015-10-25 01:15:00 CEST" "2015-10-25 01:30:00 CEST" "2015-10-25 01:45:00 CEST" "2015-10-25 02:00:00 CEST" "2015-10-25 02:15:00 CEST"
[11] "2015-10-25 02:30:00 CEST" "2015-10-25 02:45:00 CEST" "2015-10-25 02:00:00 CET"  "2015-10-25 02:15:00 CET"  "2015-10-25 02:30:00 CET" 
[16] "2015-10-25 02:45:00 CET"  "2015-10-25 03:00:00 CET"  "2015-10-25 03:15:00 CET"  "2015-10-25 03:30:00 CET"  "2015-10-25 03:45:00 CET" 

为了演示这个问题,我选择了一个示例时间戳:

> tx <- tdf$time_posix_vec[7]
> tx
[1] "2015-10-25 01:30:00 CEST"

我已经尝试过rubridate的with_tz函数,但如果我将它与#34; CET&#34;一起使用,就会发生这种情况:

> with_tz(tx, tzone = "CET")
[1] "2015-10-25 01:30:00 CEST"

我假设,时区处理程序知道在我的位置CET在3月的最后一周和10月的最后一周之间变为CEST。

为了解决这个问题,我可以使用阿尔及利亚的时区,因为阿尔及利亚使用CET而没有夏令时(正如维基百科告诉我的那样)。但是,这可能会在未来发生变化,并且

我想知道这个解决方案是否会因此而有点不安全?

> with_tz(tx, tzone = "Africa/Algiers")
[1] "2015-10-25 00:30:00 CET"

我认为最好的方法是使用&#34; UTC + 1&#34;,但with_tz的行为恰恰与我的预期相反:

> with_tz(tx, tzone = "UTC+1")
[1] "2015-10-24 22:30:00 UTC"

得到00:30:00我将不得不使用:

> with_tz(tx, tzone = "UTC-1")
[1] "2015-10-25 00:30:00 UTC"

但是标签&#34; UTC&#34;是错误的,因为在UTC中它将是

> with_tz(tx, tzone = "UTC")
[1] "2015-10-24 23:30:00 UTC"
  • 为什么&#34; UTC + 1&#34;将时间戳切换为UTC-0100而不是UTC + 0100?
  • 是否有一个强制时间戳为UTC + 0100的函数,并且还为时间戳添加了正确的时区标签,因此结果为"2015-10-25 00:30:00 UTC+1"

提前致谢,

问候,彼得

1 个答案:

答案 0 :(得分:0)

我想我找到了解决方案:现在我用

t1 <- as.POSIXct("2016-07-12 17:43","Etc/GMT-1") 
例如,

。我感到困惑的是GMT-1UTC+0100相同,它们似乎在bsd风格的时区转过来。