【问题标题】:Extract time from timestamp?从时间戳中提取时间?
【发布时间】:2016-08-10 23:34:21
【问题描述】:

基本上,我只需要 R 中的一列时间戳中的小时、分钟和秒,因为我想查看不同数据点在一天和一天的不同时间出现的频率,而日期是不相关的。

但是,这是数据集中时间戳的结构方式: 2008-08-07T17:07:36Z

我不确定如何只从这个时间戳中获取那个时间。

感谢您提供的任何帮助,如果我可以提供更多信息,请告诉我!

【问题讨论】:

    标签: r timestamp


    【解决方案1】:

    我们可以使用strptime 转换为日期时间类,然后使用format 提取小时:分钟:秒。

    dtime <- strptime(str1, "%Y-%m-%dT%H:%M:%SZ")
    format(dtime, "%H:%M:%S")
    #[1] "17:07:36"
    

    如果 OP 想要将小时、分钟、秒作为单独的列

    read.table(text=format(dtime, "%H:%M:%S"), sep=":", header=FALSE)
    #  V1 V2 V3
    #1 17  7 36
    

    另一个选项是使用lubridate

    library(lubridate)
    format(ymd_hms(str1), "%H:%M:%S")
    #[1] "17:07:36"
    

    数据

    str1 <- "2008-08-07T17:07:36Z"
    

    【讨论】:

      【解决方案2】:

      只是

      x <- '2008-08-07T17:07:36Z'
      substr(x, 12, 19)
      #[1] "17:07:36"
      

      ...如果时间戳是一致的,我想它会是一个 ISO_8601 (https://en.wikipedia.org/wiki/ISO_8601) 字符串。

      【讨论】:

        【解决方案3】:

        我想你期待这个......

        Sys.time()
        [1] "2016-04-19 11:09:30 IST"
        format(Sys.time(),format = '%T')
        [1] "11:09:30"
        

        如果您想提供自己的时间戳,请使用以下代码:

        format(as.POSIXlt("2016-04-19 11:02:22 IST"),format = '%T')
        [1] "11:02:22"
        

        【讨论】:

          【解决方案4】:

          正则表达式可能会非常有效:

          x <- '2008-08-07T17:07:36Z'
          x
          ## [1] "2008-08-07T17:07:36Z"
          sub('.*T(.*)Z', '\\1', x)
          ## [1] "17:07:36"
          

          【讨论】:

            猜你喜欢
            • 2015-01-10
            • 2021-02-18
            • 1970-01-01
            • 2018-04-17
            • 1970-01-01
            • 1970-01-01
            • 2018-07-18
            • 2018-02-02
            • 2017-03-09
            相关资源
            最近更新 更多