2016-04-10 101 views
0

我有這個20160407 4:30 pm數據的時間字符串,我想將它轉移到時間戳。Java的無法解析的日期例外年月日H:M一

Timestamp timestamp = null; 
try { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a"); 
    //SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); 
    Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 
    timestamp = new java.sql.Timestamp(parsedDate.getTime()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

我得到錯誤:

java.text.ParseException: Unparseable date: "20160407 4:30 pm " 
+3

做工精細這裏,與Java 8.什麼是你的locale?也許'下午'不是你在你的語言環境中說'pm'的方式。嘗試使用Locale.US而不是默認的語言環境。另外,發佈異常的完整堆棧跟蹤。 –

+0

@JBNizet與你同意。應該檢查本地。 –

回答

4

我目前在美國,你的代碼運行正常,如果我不指定區域。然而,當我明確地將我的語言環境更改爲中國時,我們使用'下午'作爲'pm'和'上午'作爲'am',所以如果在代碼中將'pm'更改爲'下午'它會工作。

Locale locale = Locale.CHINA; 
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd h:m a", locale); 

Date parsedDate = dateFormat.parse("20160407 4:30 pm"); 

因此,請檢查您的默認語言環境是Locale locale = Locale.getDefault()

另外,我建議你使用新的Java日期和時間API了。

+0

格式化程序類將使用您指定的模式,即使這不是區域設置默認值。我沒有理由投票。 – duffymo

+1

@duffymo是的,它會,然後在這個地方它可能會失敗,這就是爲什麼有一個錯誤。你可以看看:[自定義格式](https://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html) –

+1

@duffymo錯誤解析,因爲他正試圖解析字符串時發生作爲一個日期,而不是在日期格式中對字符串 –

相關問題