Неожиданная исключительная ситуация разбора Java SimpleDateFormat - PullRequest
6 голосов
/ 23 апреля 2009

Я не могу понять, почему эти несколько строк

    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);
        }

    }

вызвать исключения и распечатать

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

... в то время как "непарсируемое" время соответствует строке формата, которую я передал SimpleDateFormat () .. Любая идея?

Ответы [ 3 ]

22 голосов
/ 23 апреля 2009

Это проблема локали. Использование:

sdf = SimpleDateFormat("EEE MMM d HH:mm:ss z yyyy", Locale.US);
0 голосов
/ 23 апреля 2009

'z' в вашем формате представляет TimeZone, а Java распознает только определенные идентификаторы часовых поясов. Вы можете получить список из класса TimeZone как String Array. CEST не появляется в списке, который я только что сгенерировал из JDK 1.5

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

Надеюсь, это поможет.

0 голосов
/ 23 апреля 2009

У меня работает.

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);
    }

}

}

...