将日期时间转换为“%Y-%m-%d%H”中的“%Y-%m-%d%H:%M:%S”格式

时间:2018-06-22 21:15:14

标签: r datetime lubridate

我需要将日期时间列转换为特定格式,"%Y-%m-%d %H:%M:%S"转换为"%Y-%m-%d %H"

例如:

library(lubridate)

#input
dates <- as_datetime(c("2018-06-22 18:19:04", "2018-06-22 19:58:04","2018-06-22 19:30:08", "2018-06-22 16:46:00", "2018-06-22 16:45:04"))

#output
dates_mod <- as_datetime(c("2018-06-22 18:00:00", "2018-06-22 19:00:00","2018-06-22 19:00:00", "2018-06-22 16:00:00", "2018-06-22 16:00:00"))

2 个答案:

答案 0 :(得分:1)

这是您需要的吗?

> trunc(dates, "hours")
[1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
[4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"

答案 1 :(得分:0)

这也可以:

lubridate::floor_date(dates,"hours")
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"

floor_datetrunc.Date类似,但是您可以进行其他一些整洁的操作,例如floor_date (dates,"3 hours")来按时间范围舍入。

它还支持更多时间单位,完整列表为(?floor_date):

  

秒,分钟,小时,天,周,月,双月,季度,季节,   半年和一年

虽然trunc支持(?trunc.Date):

  

秒,分钟,小时,天,月或年

使用format

format.Date(dates,"%Y-%m-%d %H:00:00 %Z")
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"

您确实不应该使用某些骇人听闻的解决方案,但是它很好地展示了ymd_h

lubridate::ymd_h(gsub("......$","",dates))
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"