从时间戳中提取时间?

Posted

技术标签:

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

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

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

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

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

【问题讨论】:

【参考方案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"

【讨论】:

以上是关于从时间戳中提取时间?的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL 中的时间戳中提取时间

从 MYSQL 上的时间戳中提取日/月/年

pandas:从时间戳中提取日期和时间

pandas:从时间戳中提取日期和时间

无法从 BigQuery 中的时间戳中提取日期

如何使用 pyspark 从 aws 胶水的时间戳中提取年份