Java 解析非标准的日期格式,如+;0yyyyMMdd“;

Java 解析非标准的日期格式,如+;0yyyyMMdd“;,java,parsing,date,format,Java,Parsing,Date,Format,我有日期,它以+0yyyyMMdd 例如,2011年3月12日是+020110312 现在它肯定是+符号,日期前有一个0,但将来它可能不止一个零,例如+000020110312 是否可以使用标准的Java.text.DateFormat.parse(字符串源代码)对其进行解析 或者我应该编写自定义解析方法 谢谢。我将从您的表示中为最后8个字符添加子串,然后对其进行解析。(我不确定你是否能安全地避开它)我猜+0是一个时区指示器,所以你可以试试: new SimpleDateFormat("Zyyy

我有日期,它以+0yyyyMMdd

例如,2011年3月12日是+020110312

现在它肯定是+符号,日期前有一个0,但将来它可能不止一个零,例如+000020110312

是否可以使用标准的Java.text.DateFormat.parse(字符串源代码)对其进行解析

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


谢谢。

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

我猜+0是一个时区指示器,所以你可以试试:

new SimpleDateFormat("ZyyyyddMM")
唉,这并不能立即奏效


为了使其工作,从
0
length-8
获取一个子字符串,并将其扩展为四位数字以满足时区的RFC。请参见

您可以使用SimpleDataFormat解析日期部分

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

但是您需要去掉“+000”前缀。

如果
+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
数月会破坏解析结果

另见:

<强> Update <强>:因为这在将来看起来是不同的,但将来可能会超过一个零,你可以更好地考虑最后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

java.text.ParseException:不可解析的日期:“+020110312”
::为什么不解析最后8个字符的子字符串?这看起来像是一种古老的压缩十进制日期格式。零使位数变为奇数,因此它将压缩为5个字节。