Unexpected java SimpleDateFormat parse exception

2019-01-18 15:17发布

问题:

I can't understand why this few lines

    Date submissionT;
    SimpleDateFormat tempDate = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");

    public time_print(String time) {
        try {
          submissionT=tempDate.parse(time);
        }
        catch (Exception e) {     
          System.out.println(e.toString() + ", " + time);
        }

    }

Cause exceptions and print out

    java.text.ParseException: Unparseable date: "Tue Mar 31 06:09:00 CEST 2009", Tue Mar 31 06:09:00 CEST 2009

... while the "unparsable" time is compliant with the format string i've passed to SimpleDateFormat().. Any Idea?

回答1:

It is a Locale issue. Use:

sdf = SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US);


回答2:

Works for me.

public class Main {

public static void main(String[] args)
{
    time_print("Tue Mar 31 06:09:00 CEST 2009");
}

static Date submissionT;
static SimpleDateFormat tempDate = new SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy");

public static void time_print(String time) {
    try {
      submissionT=tempDate.parse(time);
      System.out.println(submissionT);
    }
    catch (Exception e) {
      System.out.println(e.toString() + ", " + time);
    }

}

}



回答3:

The 'z' in your format represents TimeZone and Java only recognises certain timezone ID's. You can get the list out of the TimeZone class as a String Array. CEST does not appear in the list I just generated from JDK 1.5

String[] aZones = TimeZone.getAvailableIDs();
    for (int i = 0; i < aZones.length; i++) {
        String string = aZones[i];
        System.out.println(string);
    }

Hope this helps.