问题描述
正如标题所暗示的,我正在尝试使用 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"