我有日期,以格式 + 0yyyyMMdd
进入我们的系统例如,2011年3月12日 +020110312
现在它在Date之前肯定是 + 符号和一个 0 ,但将来它可能不止一个零,例如。的 000020110312
是否可以使用标准Java java.text.DateFormat.parse(String source)解析它?
或者我应该编写自定义解析方法?
谢谢。
答案 0 :(得分:4)
我猜+0是时区指标,所以你可以尝试:
new SimpleDateFormat("ZyyyyddMM")
唉,这不会立即起作用。
为了使其工作,请从0
到length - 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”前缀。