使用可变空格解析日期
我使用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" ]
这两种日期格式的顺序并不重要。一旦我添加了两种格式,就不再输出警告。
- 在Java 1.7.0下运行的SQL-Server(MSSQL-JDBC 3.0)中的日期列检索为过去2天
- SimpleDateFormat似乎给出了错误的结果
- 如何从ISO 8601格式字符串中选择时区到日历实例中
- Twitter日期不可解析?
- SimpleDateFormat方法解析中可能出现的错误
- 如何通过JPA将Oracle Date字段正确转换为java.util.Date?
- Android – SQLite – 选择BETWEEN Date1和Date2
- 无法将java.lang.String类型的属性值转换为必需类型java.util.Date
- 使用SimpleDateFormat将带有GMT时区的字符串解析为Date