【问题标题】:Extract time (HMS) from lubridate date time object?从润滑日期时间对象中提取时间(HMS)?
【发布时间】:2018-11-17 02:22:59
【问题描述】:

我有以下日期时间:

t

我想把它分成时间和日期。

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

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

请告知如何提取它。

我想了解原因:

strftime(t, format="%H:%M:%S") 

会做这项工作,但我在lubridate::hmsparse_date_time 中缺少什么?

【问题讨论】:

    标签: r date lubridate


    【解决方案1】:

    这就是你要找的吗?现在可以使用 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
    

    【讨论】:

      【解决方案2】:

      您在lubridatehms() 中缺少的是它需要“时分秒三倍的字符向量”作为参数。没有规定处理还包含日期信息的字符串。因此,Sys.Date()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"
      

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

      【讨论】:

        【解决方案3】:

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

        date <- anytime::anydate(t)
        time <- strftime(t, format="%H:%M:%S")
        

        【讨论】:

          【解决方案4】:

          这样的?

            library(hms)
              t <- "2018-05-01 23:02:50 UTC"
              unlist(strsplit(t," "))[2]%>%hms::parse_hms()
          

          【讨论】:

            【解决方案5】:

            这是一个不包含另一个包的解决方案(hmslubridate 之上):

            t <- "2018-05-01 23:02:50 UTC"
            
            sprintf("%02d:%02d:%02d", hour(t), minute(t), second(t))
            
            "23:02:50"
            

            【讨论】:

              【解决方案6】:

              存在 Lubridate 包中的函数,叫做“hour()”,这里是官方指南: https://lubridate.tidyverse.org/reference/hour

              t <- "2018-05-01 23:02:50 UTC"
              
              lubridate::hour(t)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-01-07
                • 1970-01-01
                • 1970-01-01
                • 2019-05-08
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多