从Date到POSIXct对象的转换-错误一小时

时间:2019-06-27 12:35:49

标签: r

我正在尝试将日期对象(通过用户通过Shiny输入获得)转换为POSIXct对象-尽管两个对象都有一个小时,但我想深入了解为什么将一个小时添加到获得的POSIXct对象中同一时区。

请参见下面的代码。我尝试在Google或Stackoverflow论坛上找到并回答,但未成功。

> "2019-05-11" %>% as.Date(tz = "UTC") %>% as.POSIXct(tz = "UTC")
[1] "2019-05-11 01:00:00 BST"

> "2019-05-11" %>% as.Date(tz = "GMT") %>% as.POSIXct(tz = "GMT")
[1] "2019-05-11 01:00:00 BST"

我已经在控制台(RStudio)上输入了以上几行。我本来希望POSIXct对象是

"2019-05-11 00:00:00 BST". 

有人知道吗?我想通过从POSIXct对象中减去来避免操纵上述结果,以防上面的问题与我的计算机(时钟)有关,并且在我打算部署Shiny应用程序的计算机上可能不存在。

我一般不是R或计算机方面的专家,如果没有太多术语,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

输出在您当地的时区,似乎是“ BST” = GMT + 1,这就是为什么您看到增加的小时数

您可以在代码之前添加此行,以使您的时区UTC

Sys.setenv(TZ="UTC")

答案 1 :(得分:0)

您现在不需要更改locales?timezones产生:

  

时区区域可能有几个名称,例如:   “欧洲/伦敦”也称为GB,GB-Eire,欧洲/贝尔法斯特,   欧洲/根西岛,欧洲/曼岛和欧洲/泽西岛。

因此,我们可以在strftime之后使用as.POSIXct,并为两个呼叫都设置tz="GB"。神奇的"BST"在预期时间之后显示为时区缩写。

tm <- "2019-05-11"
strftime(as.POSIXct(tm, tz="GB"), format="%Y-%m-%d %H:%M:%S %Z", tz="GB")
# [1] "2019-05-11 00:00:00 BST"