【问题标题】:Lubridate or ANYTIME to convert from 24hr to 12hr timeLubridate 或 ANYTIME 从 24 小时转换为 12 小时时间
【发布时间】:2021-02-16 23:34:27
【问题描述】:

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

最终编辑::::: 我犯了误读/应用解决方案的错误,这导致了错误.. 使用 cmets 的inbound$Time &lt;- format(inbound$Time, "%I:%M:%S")as.numeric(format(inbound$Timestamp, "%I")) 时...都有效并解决了问题我有。

【问题讨论】:

    标签: r lubridate microsoft-r


    【解决方案1】:

    要明确...从 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"
    

    【讨论】:

    • 是的,它从 Posixct 开始。我一直在为基础的日期/时间而苦苦挣扎。我从没想过它这么简单。你可能刚刚保存了最后两个或在我拔掉它们之前,我头上有 3 根头发..
    • 现在我正在尝试它..这会从日期解析时间..但我无法使用 %I:%M:%S.. 转换时间。上一步是转换为 CHARACTER 类,我得到一个错误.. 用尝试/错误更新我的问题
    • 你想要的输出是什么?一个小时的数字? as.numeric(format(X ,"%I")) 有效吗?
    • 您创建时间,然后再次格式化时间。没必要。我的解决方案只是简单地显示格式的可能性......只需在时间戳上使用 %I ..
    • 所以,请告诉我您希望输出是什么 - 类和格式,我们可以排序!
    猜你喜欢
    • 2013-10-14
    • 2012-04-09
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2017-06-27
    • 2016-12-19
    相关资源
    最近更新 更多