从String中提取时区

时间:2013-05-28 16:01:13

标签: java timezone simpledateformat

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

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)

有谁知道如何使用正确的Dateinput解析为TimeZone

2 个答案:

答案 0 :(得分: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:");

答案 1 :(得分: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