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



我在"CET"(中欧时间=冬季时间=UTC+0100)和"CEST"(中欧夏令时=UTC+0200)中得到了一些带有POSIXct时间戳的数据。由于夏令时的原因,我在绘图和计算方面遇到了一些麻烦,我希望所有的时间戳都在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"

我已经尝试过lubridate的with_tz函数,但如果我将其与"CET"一起使用,则会发生以下情况:

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

我想,时区管理员知道在我所在的位置,CET在三月的最后一周到十月的最后一个星期之间变成了CEST。

为了解决这个问题,我可以使用阿尔及利亚的时区,因为阿尔及利亚使用欧洲中部时间而没有夏令时(正如维基百科告诉我的那样)。然而,这种情况在未来可能会改变,

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

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

我认为最好的方法是使用"UTC+1",但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"

但是标签"UTC"也是错误的,因为在UTC中它将是

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

提前感谢

问候,Peter

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

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

例如。让我困惑的是,GMT-1UTC+0100是一样的,它们似乎在bsd风格的时区中扭转了方向。

相关内容

  • 没有找到相关文章

最新更新