解析非标准日期格式,如“+ 0yyyyMMdd”

时间:2010-06-29 14:52:25

标签: java parsing date format

我有日期,以格式 + 0yyyyMMdd

进入我们的系统

例如,2011年3月12日 +020110312

现在它在Date之前肯定是 + 符号和一个 0 ,但将来它可能不止一个,例如。的 000020110312

是否可以使用标准Java java.text.DateFormat.parse(String source)解析它?

或者我应该编写自定义解析方法?

谢谢。

4 个答案:

答案 0 :(得分:4)

我猜+0是时区指标,所以你可以尝试:

new SimpleDateFormat("ZyyyyddMM")
唉,这不会立即起作用。

为了使其工作,请从0length - 8获取子字符串,并将其展开为四位数,以符合时区的RFC。见SimpleDateFormat

答案 1 :(得分:2)

如果+0前缀是常量,那么您可以使用单引号引用它。

String string = "+020110312";
Date date = new SimpleDateFormat("'+0'yyyyMMdd").parse(string);
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011

(根据我的时区结果是正确的)

请注意,月份由MM而不是mm表示。 mm表示分钟。使用mm几个月会破坏解析结果。

另见:


更新:由于以后“似乎有所不同,但将来它可能不止一个零”,您可以更好地考虑对最后8个字符进行子串

String string = "+020110312";
Date date = new SimpleDateFormat("yyyyMMdd").parse(string.substring(string.length() - 8));
System.out.println(date); // Sat Mar 12 00:00:00 GMT-04:00 2011

答案 2 :(得分:0)

我会从你的表示中对最后8个字符进行子字符串,然后解析它。 (我不确定你是否能安全地避免它)

答案 3 :(得分:0)

您可以使用SimpleDateFormat解析日期部分。

SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
df.parse("20110312");

但你需要剥掉“+000”前缀。