从String中提取时区

Rod*_*aki 7 java timezone simpledateformat

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

20130401100000[-03:EST]
Run Code Online (Sandbox Code Playgroud)

我跟你说话是-03因为根据SimpleDateFormat文件它应该有4位数.我得到的最接近的模式是:

yyyyMMddHHmmss'['Z':'z']'
Run Code Online (Sandbox Code Playgroud)

但由于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));
}
Run Code Online (Sandbox Code Playgroud)

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

20130528155734[+0000:GMT]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试解析时,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)
Run Code Online (Sandbox Code Playgroud)

有谁知道我怎么能用正确的解析input成一个?DateTimeZone

may*_*Van 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));
}
Run Code Online (Sandbox Code Playgroud)

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

    input = input.replaceAll("(\\[[+-]\\d{2}):","$100:");
Run Code Online (Sandbox Code Playgroud)