Проблема в том, что ваш аргумент format
не соответствует фактическому формату даты:
- Часы, минуты и секунды отделяются
.
вместо :
- Ваши данные имеют как миллисекунды, так и разделитель AM / PM
Данные (я изменил последнее значение ENDDATE
, чтобы включить время PM, потому что это показывает важный крайний случай):
df <- structure(list(STARTDATE = c("18-JAN-19 10.42.30.000000000 AM",
"18-JAN-19 10.43.02.000000000 AM", "18-JAN-19 10.44.04.000000000 AM",
"18-JAN-19 10.41.34.000000000 AM"), ENDDATE = c("18-JAN-19 11.01.24.000000000 AM",
"18-JAN-19 11.02.42.000000000 AM", "18-JAN-19 11.05.57.000000000 AM",
"18-JAN-19 10.53.21.000000000 PM")), class = "data.frame", row.names = c(NA,
-4L))
Если вы исправите свой аргумент format
и затем примените его к каждому вектору даты, вы обнаружите, что он преобразует их в формат POSIXct:
df$STARTDATE <- as.POSIXct(df$STARTDATE, format = "%d-%b-%y %I.%M.%OS %p")
df$ENDDATE <- as.POSIXct(df$ENDDATE, format = "%d-%b-%y %I.%M.%OS %p")
STARTDATE ENDDATE
1 2019-01-18 10:42:30 2019-01-18 11:01:24
2 2019-01-18 10:43:02 2019-01-18 11:02:42
3 2019-01-18 10:44:04 2019-01-18 11:05:57
4 2019-01-18 10:41:34 2019-01-18 22:53:21
class(df$STARTDATE)
[1] "POSIXct" "POSIXt"
Обратите внимание, что в списке форматов %I.%M.%OS
вместо %H.%M.%OS
, поскольку %I
(часы с 01-12) должны использоваться с временем AM / PM, а не %H
(часы с 0-23) , Спасибо М-М за это!
См. ?strptime
:
% p ... Используется вместе с% I, а не с% H