Lubridate 或 ANYTIME 将 24 小时制转换为 12 小时制

Lubridate or ANYTIME to convert from 24hr to 12hr time

如标题所示,我正在尝试使用 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

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

然后我也试了:

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

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

最终编辑::::::我犯了 mis-reading/applying 解决方案的错误,这导致了错误.. 当使用评论中的 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"