将日期时间字符向量转换为日期时间格式

Converting datetime character vector into date-time format

我已尝试将以下字符向量转换为日期时间格式("%Y-%m-%d %H:%M:%S")但无法成功转换午夜时间戳.如果向量在同一操作中同时包含日期(午夜 00:00:00)和日期时间。任何方便的选项都可以做到这一点。请忽略字符长度和粘贴选项。谢谢

dttime=c()
dttime=c("2021-08-03 11:59:59", "2021-08-03 12:59:59", "2021-08-03", 
"2021-08-03 16:59:59")
strptime(dttime, format = "%Y-%m-%d %H:%M:%S")
[1] "2021-08-03 11:59:59 IST" "2021-08-03 12:59:59 IST" NA "2021-08-03 16:59:59 IST 
as.POSIXct(dttime, format = "%Y-%m-%d %H:%M:%S")
[1] "2021-08-03 11:59:59 IST" "2021-08-03 12:59:59 IST" NA "2021-08-03 16:59:59 IST"
format(dttime, format = "%Y-%m-%d %H:%M:%S")
[1] "2021-08-03 11:59:59" "2021-08-03 12:59:59" "2021-08-03         " "2021-08-03 16:59:59

期望的输出是:

dttime
[1] "2021-08-03 11:59:59" "2021-08-03 12:59:59" "2021-08-03 00:00:00" "2021-08-03 16:59:59

任何其他可用的现有方法。

dttime[nchar(dttime)<19]=paste(dttime[nchar(dttime)<19],"00:00:00")
> dttime
 [1] "2021-08-03 11:59:59" "2021-08-03 12:59:59" "2021-08-03 00:00:00" "2021-08-03 16:59:59"

您可以使用 lubridate 包中的 as_datetime 函数

library(lubridate)
#> Warning: package 'lubridate' was built under R version 3.6.3
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
dttime = c("2021-08-03 11:59:59", "2021-08-03 12:59:59",
           "2021-08-03", "2021-08-03 16:59:59")
as_datetime(dttime, tz = "UTC")
#> [1] "2021-08-03 11:59:59 UTC" "2021-08-03 12:59:59 UTC"
#> [3] "2021-08-03 00:00:00 UTC" "2021-08-03 16:59:59 UTC"

您可以将时区更改为其他时区,请参阅?as_datetime