2014-11-21 2 views
4

У меня возникли проблемы с разбором строки в datetime.Проблемы с разбором строки в datetime

Это то, что я делаю

strftime("28/10/2014 09:05:55 p.m.", format='%d/%m/%Y %I:%M:%S %p') 
##[1] "20/10/28 12:00:00 " 

Как вы можете видеть, три нежелательных вещи происходят здесь:

  1. Возвращенные неверная дата!
  2. Время всегда устанавливается 12:00:00
  3. Возвращаемое значение является строкой, а не даты и времени (это совершенно не имеет значения ... Я могу преобразовать его в DateTime позже)

Таким образом, конкретный вопрос : Как правильно разобрать эту строку в datetime?

ответ

6

(1) try strptime вместо strftime; Я не уверен, что делает strftime, но, возможно, не то, что вы думаете.

(2) Я не думаю, что " будет работать вообще; вам может понадобиться разумное использование gsub("p.m.","PM",...).

strptime("28/10/2014 09:05:55 PM", format='%d/%m/%Y %I:%M:%S %p') 
## [1] "2014-10-28 21:05:55 EDT" 
strptime("28/10/2014 09:05:55 p.m.", format='%d/%m/%Y %I:%M:%S %p') 
## NA 
+0

Отличный !!! Я просто удалил точки, и это работает как шарм! 'strptime (gsub ('\\.', ''," 28/10/2014 09:05:55 PM "), format = '% d /% m /% Y% I:% M:% S% p')' Большое вам спасибо! – Barranka

3

Я думаю, что нужно изменить p.m. «с до PM» s первый (а также с помощью strptime, который подходит для обработки ввода:

> strptime(sub("p\\.m\\.", "PM", "28/10/2014 09:05:55 p.m."), format='%d/%m/%Y %I:%M:%S %p') 
[1] "2014-10-28 21:05:55 PDT" 

Конечно, вы, вероятно, также необходимо конвертировать a.m. в AM

+0

Оказывается, этот случай не имеет значения, это просто вопрос удаления точек в 'am' и' pm' (прямо сейчас я чувствую себя немного глупым, чтобы пропустить эту деталь) – Barranka

+0

Затем 'gsub (" \\. " , "", ...) 'Я попробовал несколько экземпляров помещать точки в спецификацию формата и сдался. –

Смежные вопросы