Lubridate 或 ANYTIME 从 24 小时转换为 12 小时时间

问题描述

正如标题所暗示的,我正在尝试使用 lubridate 或 ANYTIME(或类似的)将时间从 24 小时转换为 12 小时。为了让生活更轻松,我不需要转换整个时间。

我的意思是我有一列日期格式如下:

2021-02-15 16:30:33

我可以使用 inbound$Hour <- hour(inbound$Timestamp) 只从时间戳中获取小时,这很棒......除了它仍然是 24 小时时间。 (这会为小时数创建一个整数列)

我尝试了几种变异,例如 inbound <- inbound %>% mutate(Hour = ifelse(Hour > 12,sum(Hour - 12),Hour)

这在技术上是有效的..但我得到了一些非常不稳定的值(例如,我在几行中得到了 -294)..

有没有更简单的方法来转换 12 小时的时间?

根据下面的建议,我尝试使用基本格式如下:

inbound$Time <- format(inbound$Timestamp,"%H:%M:%s")
inbound$Time <- format(inbound$Time,"%I:%M:%s")

对于第二种格式,我收到错误

 Error in format.default(inbound$Time,"%I:%M:%s") : 
  invalid 'trim' argument

我确实注意到第一种格式转换为类 CHaraCTER 列.. 不确定这是否会导致第二种格式出现问题..

然后我也尝试了:

 `inbound$time <- format(strptime(inbound$Timestamp,"%H:%M:%s"),"%I:%M %p")`

运行没有错误..但它创建了一整列 NA

最终编辑::::: 我犯了错误阅读/应用解决方案的错误,这导致了错误......当使用评论中的 inbound$Time <- format(inbound$Time,"%I:%M:%s")as.numeric(format(inbound$Timestamp,"%I")) 时......两者都有效并解决了我遇到的问题。

解决方法

要明确...从 2021-02-15 16:30:33 开始,您只想要 04:30:33 结果?

无需润滑或任何时候。假设这是一个 Posixct


a <- as.POSIXct("2021-02-15 16:30:33")
a
# [1] "2021-02-15 16:30:33 UTC"

b <- format(a,"%H:%M:%S")
b
#[1] "16:30:33"

c <- format(a,"%I:%M:%S")
c
#[1] "04:30:33"