从润滑日期时间对象中提取时间(HMS)?

Ste*_*veS 11 r date lubridate

我有以下日期时间:

t <- "2018-05-01 23:02:50 UTC"

我想将其拆分为时间和日期。

当我申请 date(t) 我得到日期部分。但是当我使用 lubridate 的hms,parse_date_time和其他函数来执行此操作时,"HMS"我会得到NA.

我已经在 SOF 上检查了其他答案,但由于某种原因,它给了我NA

请教如何提取。

我想了解为什么:

strftime(t, format="%H:%M:%S") 
Run Code Online (Sandbox Code Playgroud)

会做的工作,但我在我丢失lubridate::hmsparse_date_time

J_F*_*J_F 8

我的解决方案是安装library(anytime)

date <- anytime::anydate(t)
time <- strftime(t, format="%H:%M:%S")
Run Code Online (Sandbox Code Playgroud)


Ror*_*lan 6

您在lubridate's中缺少的hms()是它期望“时分秒三元组的字符向量”作为参数。没有规定处理也包含日期信息的字符串。因此,Sys.Date()or的输出lubridate::now()不能作为 的输入lubridate::hms()

如果你想要一个tidyverse解决方案,这里有一个:

library(tidyverse)
library(lubridate)

now()
#> [1] "2018-08-13 16:41:31 BST"

get_time <- function(time = now()) {
  time %>%
    str_split(" ") %>%
    map_chr(2) %>%
    hms()
}

get_time()
#> [1] "16H 41M 31S"

get_time("2018-05-01 23:02:50 UTC")
#> [1] "23H 2M 50S"
Run Code Online (Sandbox Code Playgroud)

reprex 包(v0.2.0)于 2018 年 8 月 13 日创建。


Sus*_*ins 6

这就是你要找的吗?现在可以使用 hms::as_hms 更简单地完成。

> library(lubridate)
> library(hms)
> as_hms(ymd_hms("2018-05-01 23:02:50 UTC"))
23:02:50

> t <- "2018-05-01 23:02:50 UTC"
> as_hms(ymd_hms(t))
23:02:50
Run Code Online (Sandbox Code Playgroud)