我正在尝试将日期对象(通过用户通过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或计算机方面的专家,如果没有太多术语,我将不胜感激。
答案 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"