Проблема с %p
Часть связана с местностью. См. Это issue.
Неспособность к разборке связана с тем, как работает угадайщик lubridate.
Существует два способа получения lubridate форматов, гибкость и точность. При гибком сопоставлении все числовые элементы могут иметь гибкую длину (например, как 4
, так и 04
за день будут работать), но тогда между элементами должны быть нечисловые разделители. Для точного совпадения не обязательно должны быть нечисловые разделители, но элементы должны иметь точное количество цифр (например, 04
).
К сожалению, вы не можете комбинировать оба набора в одном выражении. Было бы очень сложно исправить это и сохранить текущую гибкость анализатора lubridate.
В вашем примере
> parse_date_time('4/18/1950 0130', 'mdY HM')
[1] NA
Warning message:
All formats failed to parse. No formats found.
вы хотите выполнить гибкое согласование на части даты 4/18/1950
и точное соответствие по времени части 0130
.
Пожалуйста, обратите внимание, что если ваша дата-время находится в полностью flex
или полностью формат exact
синтаксический будет работать, как ожидалось:
> parse_date_time('04/18/1950 0130', 'mdY HM')
[1] "1950-04-18 01:30:00 UTC"
> parse_date_time('4/18/1950 1:30', 'mdY HM')
[1] "1950-04-18 01:30:00 UTC"
The lubridate 1.4.1
«исправления», добавив новый аргумент parse_date_time
, exact=FALSE
, Когда установлено значение TRUE
, аргумент orders
интерпретируется как содержащий точные форматы strptime
, и никаких угадок или обучения не выполняется. Таким образом, вы можете добавить столько точных форматов, сколько хотите, и вы также получите скорость, потому что никаких угадок вообще не выполняется.
> parse_date_time(c('12/17/1996 04:00:00','4/18/1950 0130'),
+ c('%m/%d/%Y %I:%M:%S','%m/%d/%Y %H%M'),
+ exact = T)
[1] "1996-12-17 04:00:00 UTC" "1950-04-18 01:30:00 UTC"
Relatedly, был явный requested просить такой вариант.
Я могу воспроизвести ошибку. 'parse_date_time (x = mydates, orders = c ('m/d/YI: M: S p', 'm/d/Y HM'), locale =" eng ")' дает правильное значение для первого но не вторая дата/время. 'parse_date_time (mydates1, приказы = с ('% м /% г /% Y% H% M'))' не работает, но .... 'strptime (mydates1, формат ="% м /% d /% Y% H% M ")' работает, хотя ... когда 'mydates1' является только второй датой' 4/18/1950 0130' – jalapic
Я считаю, что проблема связана с '0130' второго строка. Если вы измените его на '4/18/1950 01: 30', я считаю, что все будет работать так, как ожидалось. – JasonAizkalns
@JasonAizkalns '0130' может анализироваться отдельно: 'parse_date_time ('0130', '% H% M')' дает '" 0-01-01 01:30:00 UTC ". –