разбор дат с переменными пробелами - PullRequest
7 голосов
/ 04 мая 2011

Я использую Joda для разбора дат и имею формат, в котором не используются ведущие нули, например ::10000

 Mon Nov 20 14:40:36 2006
 Mon Nov  6 14:40:36 2006

Обратите внимание, что поле dayOfMonth заполнено слева пробелом.

В настоящее время мне кажется, что мне нужно использовать два разных формата и выполнить повторную обработку в случае сбоя одного из них

"EEE MMM dd HH:mm:ss yyyy"
"EEE MMM  d HH:mm:ss yyyy"

Существует ли один формат (или переключатель API), который касается обоих случаев? (тот же ответ для SimpleDateFormat - который я не использую?)

Ответы [ 2 ]

7 голосов
/ 04 мая 2011

Я только что создал быструю программу для проверки этого -

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy");

try {
    String source1 = "Mon Nov 20 14:40:36 2006";
    Date d1 = sdf.parse(source1);
    String source2 = "Mon Nov  6 14:40:36 2006";
    Date d2 = sdf.parse(source2);

    String res1 = sdf.format(d1);
    String res2 = sdf.format(d2);

    System.out.println(source1 +"="+ res1);
    System.out.println(source2 +"="+ res2);
} catch (ParseException e) {
    e.printStackTrace();
}

Выход из этого -

Mon Nov 20 14:40:36 2006=Mon Nov 20 14:40:36 2006
Mon Nov  6 14:40:36 2006=Mon Nov 6 14:40:36 2006

Итак, хотя у source2 есть дополнительное пространство, он все равно анализируется

EEE MMM d HH:mm:ss yyyy

Надеюсь, что поможет

4 голосов
/ 05 сентября 2012

Я попытался использовать один 'd', как предложено выше в logstash 1.1.1, но он все еще жаловался на искаженную дату, когда был проанализирован однозначный день с дополнительным пробелом.Следующие правила logstash сработали.

timestamp => [ "MMM dd HH:mm:ss", "MMM  d HH:mm:ss" ]

Не имело значения, в каком порядке были эти два формата даты. Больше никаких предупреждений не выводилось, когда я добавлял оба формата.

...