2012-04-01 24 views
5

我寫了一個簡單的Util方法來將Java中的String轉換爲util.Date。什麼我無法搞清楚的是爲什麼該方法適用於第一輸入,且不能爲第二個,因爲輸入完全相同:與Java中的數據格式不一致的ParseExeption

代碼:

package util; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class StringToDate { 

    public Date getDateFromString(String strDate, String dateFormat) { 

     DateFormat df = new SimpleDateFormat(dateFormat); 
     Date date = null; 

     try { 

      date = df.parse(strDate); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(date); 

     return date; 
    } 

    public static void main(String[] args) { 

     StringToDate s2d = new StringToDate(); 

     s2d.getDateFromString("12-18-11, 10:36 AM","MM-dd-yy, hh:mm a"); 
     s2d.getDateFromString("02-04-12, 01:17 PM","MM-dd-yy, hh:mm a"); 
    } 
} 

輸出:

Sun Dec 18 10:36:00 CET 2011 
null 
java.text.ParseException: Unparseable date: "02-04-12, 01:17 PM" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at util.StringToDate.getDateFromString(StringToDate.java:17) 
    at util.StringToDate.main(StringToDate.java:33) 

從邏輯上講,輸出應該是Sat Feb 04 13:17:00 CET 2012,首先輸出。爲什麼ParseException被拋出?

編輯:下面兩行正常工作:

s2d.getDateFromString("02-04-12", "MM-dd-yy"); 
s2d.getDateFromString("01:17 PM", "hh:mm a"); 

輸出:

Sat Feb 04 00:00:00 CET 2012 
Thu Jan 01 13:17:00 CET 1970 

但是,當我嘗試解析日期和時間一起發生異常。

+0

我很困惑 - 它適合我。 – 2012-04-01 14:44:16

+0

我也是 - 你在哪種文化?感謝您提供一個簡短但完整的程序,請注意:) – 2012-04-01 14:46:50

+0

@JonSkeet:我不明白「你在哪種文化?」,但感謝你的讚美!該程序對你來說工作正常嗎?我正在使用JDK 1.6(1.6.0.11)。我嘗試了Eclipse,甚至是運行上述[SSCCE]的經典命令提示符路由(http://homepage1.nifty.com/algafield/sscce.html)。不過,同樣的例外;同樣的不一致。幫幫我! – SNag 2012-04-01 15:03:03

回答

7

您的日期字符串或格式掩碼中是否有空格或其他Unicode空格字符?

如果我將第二個日期字符串中的一個空格替換爲非破壞空間,例如Unicode character 160,我能夠重現您的錯誤。

+0

非常棒!是的,就是這樣!天啊!上述程序中的日期字符串實際上是從我試圖解析的外部文本中複製的。如何消除這種不間斷的空間,並用實際的空白區域替換它們? – SNag 2012-04-01 15:39:42

+1

+1因爲現在我可以繼續我的生活。我會一直睡不着,直到我知道這裏發生了什麼:) – 2012-04-01 15:43:38

+0

找到我正在尋找的東西:'cleanString = dirtyString.replace(「\ u00a0」,「」)或'cleanString = dirtyString .replace(「 」,「」)'消除了解析異常導致**   **! :) – SNag 2012-04-01 19:28:32