【问题标题】:Conversion from Date to POSIXct object - error by one hour从 Date 到 POSIXct 对象的转换 - 错误一小时
【发布时间】:2019-06-27 12:35:49
【问题描述】:

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

见下面的代码。我尝试在谷歌或 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 或一般计算机方面的专家,如果没有太多行话,我将不胜感激。

【问题讨论】:

  • 输出是你当地的时区,好像是“BST”,所以是GMT+1
  • 您可以在代码前输入Sys.setenv(TZ="UTC") 以获得预期结果
  • 谢谢,整理好了!感谢您的及时帮助!
  • 好的,然后我将其作为答案发布

标签: r


【解决方案1】:

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

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

Sys.setenv(TZ="UTC")

【讨论】:

    【解决方案2】:

    您现在不需要更改您的locales。 ?timezones 产量:

    一个时区可能有多个名称:例如 "Europe/London" 也被称为 GB、GB-Eire、Europe/Belfast、 欧洲/根西岛、欧洲/Isle_of_Man 和欧洲/泽西岛。

    所以我们可以在as.POSIXct 之后使用strftime 并为这两个调用设置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"
    

    【讨论】:

    • 感谢您的意见。我意识到 strftime 会返回一个字符。我正在寻找的是一个可以用来计算的 POSIXct 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2022-01-15
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多