7

我知道有几个关于此的问题。但是我对特定的日期模式有疑问。这是一个例子:

20130401100000[-03:EST]

我遇到了麻烦,-03因为根据SimpleDateFormat文档,它应该有 4 位数字。我最接近的模式是这样的:

yyyyMMddHHmmss'['Z':'z']'

但是由于是2位数字,它就行不通了。这是我用于测试的代码示例:

public static void main(String[] args) throws ParseException {
    String input = "20130401100000[-03:EST]";

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
    df.setTimeZone(TimeZone.getTimeZone("GMT"));    

    System.out.println(df.format(new Date()));
    System.out.println(df.parse(input));
}

当我打印new Date()我得到这个:

20130528155734[+0000:GMT]

但是当我尝试解析时,input我得到以下异常:

Exception in thread "main" java.text.ParseException: Unparseable date: "20130401100000[-03:EST]"
at java.text.DateFormat.parse(DateFormat.java:337)
at Teste.main(Teste.java:17)

有谁知道我如何正确解析input成 a ?DateTimeZone

4

2 回答 2

1

您可以使用以下方法更正格式:

public static void main(String[] args) throws ParseException {
    String input = "20130401100000[-03:EST]";

    DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['Z':'z']'");
    df.setTimeZone(TimeZone.getTimeZone("GMT"));    

    System.out.println(df.format(new Date()));
    input = input.replace(":","00:");
    System.out.println(df.parse(input));
}

如果您将格式正确的日期与格式不正确的日期混合在一起,您可以使用:

    input = input.replaceAll("(\\[[+-]\\d{2}):","$100:");
于 2013-05-28T16:11:27.587 回答
0

JDK 7 支持SimpleDateFormat中的更新模式

具体来说,X 字符增加了对 ISO 8601 时区的支持。

用 JDK 7 试试这个模式

DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss'['X':'z']'");

在 JDK 7 上,我得到以下输出。

20130602140935[Z:GMT] 2013 年 4 月 1 日星期一 13:00:00 GMT

于 2013-05-29T03:41:02.613 回答