使用可变空格解析日期

我使用Joda来解析日期并使用不使用前导零的格式,例如:

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的答案是一样的 – 我不使用它?)

我刚刚创建了一个快速程序来检查 –

 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 

希望有所帮助

我尝试在logstash 1.1.1中使用上面建议的单个“d”,但是当解析具有额外前导空格的单个数字日时,它仍然抱怨格式错误的日期。 以下logstash规则确实有效。

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

这两种日期格式的顺序并不重要。一旦我添加了两种格式,就不再输出警告。