【问题标题】:Add %H:%M:%S into as.POSIXct format in R在 R 中将 %H:%M:%S 添加为 as.POSIXct 格式
【发布时间】:2018-12-10 10:16:17
【问题描述】:

这看起来像一个微不足道的问题,但我无法让它工作。我需要简单地将午夜转换为 POSIXct 格式,但也需要小时、分钟和秒,就像这样:

nextDay_t <- strptime(paste0(as.character(Sys.Date() + 1)," 00:00:00"), format = "%Y-%m-%d %H:%M:%S")
nextDay_t <- format(nextDay_t, "%Y-%m-%d %H:%M:%S")
nextDay_t <- as.POSIXct(nextDay_t, format='%Y-%m-%d %H:%M:%S', tz="EST")

但仍然只有“2018-12-11 EST”而不是“2018-12-11 00:00:00 EST”。我的代码中有什么遗漏吗?

【问题讨论】:

  • nextDay_t 是一个 POSIXct 对象而不是字符串,因此在控制台上打印,因为 R 认为更漂亮(在这种特定情况下,当它们都为零时删除小时)。当你想打印它时,你只需要format那个对象
  • @digEmAll:是的,你完全正确!非常感谢!

标签: r


【解决方案1】:

您的代码似乎在正确的轨道上。在调用strptime 之后,小时/分钟/秒组件实际上仍然存在。默认情况下,它们只是在检查对象时不会自动显示。

您可以尝试对 format 进行以下调用,其中包括这些组件以及时区 (%Z):

nextDay_t <- strptime(paste0(as.character(Sys.Date() + 1)," 00:00:00"), format = "%Y-%m-%d %H:%M:%S")
nextDay_t
format(nextDay_t,"%Y/%m/%d %H:%M:%S %Z")  # include hour/minute/second and time zone

[1] "2018-12-11 CET"
[1] "2018/12/11 00:00:00 CET"

【讨论】:

  • 谢谢蒂姆。这对我仍然不起作用。正如@digEmAll 所提到的,R 删除了它们都为零的时间。
  • @martinkabe 我认为您错过了该评论的重点(以及我的回答)。您应该依赖 R 以您想要的方式打印 POSIXct 日期时间。相反,请使用我的答案中的建议和 format 函数。 format 适用于所有情况 AFAIK。
  • @martinkabe:是的,蒂姆是对的,我的评论的重点是 POSIXct 对象内部仍然有时间信息,但它并不总是自动在控制台上打印它......您需要 format 提供特定格式的对象以确保它按您的意愿打印
  • 是的,格式保持 "%Y/%m/%d %H:%M:%S" 但作为字符。在 as.POSIXct 格式化之后它不会打印相同的内容,我需要进一步添加分钟/小时操作。
猜你喜欢
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多