2010-01-05 100 views
18

在嘗試轉換日期格式時,我得到一個異常:無法解析日期,不知道如何解決此問題。Java:可解析日期異常

我收到一個字符串,它表示一個事件日期,並希望在GUI中以不同的格式顯示此日期。

什麼,我試圖做的是以下幾點:

private String modifyDateLayout(String inputDate){ 
     try { 
      //inputDate = "2010-01-04 01:32:27 UTC"; 
      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
      return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return "15.01.2010"; 
     } 
    } 

反正行

String modifiedDateString = originalDate.toString(); 

是假的。我想獲得在以下格式的日期字符串:

DD.MM.YYYY HH:MM:SS

和輸入字符串例子如下:

2010-01-04 01:32:27 UTC

有沒有人知道如何將上面的例子date(String)轉換成字符串格式dd.MM.yyyy HH:mm:ss?

謝謝!

編輯:我修正了錯誤的輸入日期格式,但仍然無效。上面是粘貼的方法,下面是調試會話的屏幕圖像。

alt text http://img683.imageshack.us/img683/193/dateproblem.png

#UPDATE 我跑

String[] timezones = TimeZone.getAvailableIDs(); 

並沒有UTC字符串在數組中。這是一個奇怪的問題。

我做了一個骯髒的黑客的作品:

private String modifyDateLayout(String inputDate){ 
    try { 
     inputDate = inputDate.replace(" UTC", ""); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate); 
     return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return "15.01.2010"; 
    } 
} 

但我仍寧願改造原有的輸入而不切割時區了。

此代碼是爲使用JDK 1.6的Android手機編寫的。

+0

我知道這是一個很久以前的線程,但要澄清關於「UTC」處於日期格式時解析異常的疑問。該代碼在Android中被破解。 [Android bug報告](http://code.google.com/p/android/issues/detail?id=14963) – Creniale 2011-04-29 04:01:21

回答

39

你基本上在這裏做的是依靠Date#toString()已經有一個固定的模式。要將Java Date對象轉換爲另一種人類可讀的字符串模式,您需要SimpleDateFormat#format()

private String modifyDateLayout(String inputDate) throws ParseException{ 
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
} 

順便說一句,在「無法解析日期」的異常可以在這裏SimpleDateFormat#parse()拋出。這意味着inputDate未處於預期模式"yyyy-MM-dd HH:mm:ss z"。您可能需要修改該模式以匹配inputDate的實際模式。

更新:好吧,我做了一個試驗:

public static void main(String[] args) throws Exception { 
    String inputDate = "2010-01-04 01:32:27 UTC"; 
    String newDate = new Test().modifyDateLayout(inputDate); 
    System.out.println(newDate); 
} 

此打印正確:

03.01.2010 21:32:27 

(我在GMT-4)

更新2:根據你的編輯,你真的得到了ParseException。最可疑的部分將是UTC的時區。在您的Java環境中,這實際上是是否已知?你使用什麼Java版本和什麼操作系統版本?檢查TimeZone.getAvailableIDs()。中間必須有一個UTC

+0

問題在於行date date = formatter.parse(inputDate); 引發異常。我將輸入格式固定爲yyyy-MM-dd HH:mm:ss z,但仍然會引發異常。 – 2010-01-05 21:43:20

+0

我預計,看到我的編輯是在你評論之前添加的。如果您需要更多幫助以找到正確的模式,則需要發佈** actual **'inputDate'值的示例。 – BalusC 2010-01-05 21:43:41

+1

我有這個麻煩來解析這個日期:「11/10/2011 06:03:19下午」 – DkAngelito 2011-10-12 00:19:06