2009-04-23 113 views
6

我不明白为什么这几行意外的Java SimpleDateFormat的解析异常

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()的字符串.. 任何想法?

+0

你的'时间'到底是什么? – 2009-04-23 11:11:30

+0

我已经打印出println()..时间是一个字符串,并且包含“Tue Mar 31 06:09:00 CEST 2009 ” – Emilio 2009-04-23 11:12:50

回答

19

这是一个语言环境的问题。使用:

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

适合我。

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

} 

}

+5

它只适用于您的默认区域设置匹配预期的。 – kgiannakakis 2009-04-23 11:34:48

-1

格式中的'z'表示TimeZone,Java只识别特定的时区ID。您可以将TimeZone类的列表作为字符串数组获取。 CEST没有出现在我刚刚从JDK 1.5生成的列表中

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

希望这会有所帮助。