从时间戳中提取时间?

时间:2016-04-19 02:17:30

标签: r timestamp

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

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

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

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

4 个答案:

答案 0 :(得分:4)

我们可以使用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"

答案 1 :(得分:4)

只是

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

我认为你期待这个...

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"