2010-12-21 116 views
100

如何解析下面的日期字符串到Date對象中?如何解析日期字符串到日期?

String target = "Thu Sep 28 20:29:30 JST 2000"; 
DateFormat df = new SimpleDateFormat("E MM dd kk:mm:ss z yyyy"); 
Date result = df.parse(target); 

拋出異常......

java.text.ParseException: Unparseable date: "Thu Sep 28 20:29:30 JST 2000" 
     at java.text.DateFormat.parse(DateFormat.java:337) 
+1

僅供參考,麻煩的舊日期,時間類,作爲['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html),['java.util.Calendar'](https: //docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)和'java.text.SimpleTextFormat'現在是[legacy](https://en.wikipedia.org/wiki/Legacy_system),取而代之的是[java.time](https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)類。請參見[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 – 2017-05-31 17:59:13

回答

157

的模式是錯誤的。你有一個3個字母的日期縮寫,所以它必須是EEE。你有一個3個字母的月份縮寫,所以它必須是MMM。由於那些日期和月份縮寫是區域敏感的,因此您希望明確指定SimpleDateFormat區域設置爲英文,否則它將使用平臺默認語言環境,該語言環境本身可能不是英語。

public static void main(String[] args) throws Exception { 
    String target = "Thu Sep 28 20:29:30 JST 2000"; 
    DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss z yyyy", Locale.ENGLISH); 
    Date result = df.parse(target); 
    System.out.println(result); 
} 

這裏

Thu Sep 28 07:29:30 BOT 2000

這版畫這是正確的,因爲按我的時區。

我也會重新考慮,如果你不願意使用HH而不是kk。有關有效模式的詳細信息,請閱讀javadoc

+0

沒有,仍然拋出同樣的錯誤,我也嘗試過zzz,也沒有運氣。我現在要檢查文檔,感謝您的鏈接。 – 2010-12-21 05:00:10

+1

在此處運行良好(從第二條代碼行中刪除「String」後)。你的問題在別的地方。 – BalusC 2010-12-21 05:02:13

+0

嗯,對,我會刪除「字符串」,但仍然沒有在我的本地工作,現在看着其他地方..有趣.. – 2010-12-21 05:03:14

12

這裏是一個工作示例:

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

public class j4496359 { 
    public static void main(String[] args) { 
     try { 
      String target = "Thu Sep 28 20:29:30 JST 2000"; 
      DateFormat df = new SimpleDateFormat("EEE MMM dd kk:mm:ss zzz yyyy"); 
      Date result = df.parse(target); 
      System.out.println(result); 
     } catch (ParseException pe) { 
      pe.printStackTrace(); 
     } 
    } 
} 

會打印:

Thu Sep 28 13:29:30 CEST 2000 
+2

我已經試過了..它沒有工作:( – 2010-12-21 04:54:20

+0

更新我的帖子與測試代碼;) – miku 2010-12-21 05:08:47

+0

謝謝你包括相關的進口。 – 2014-08-22 23:28:50

6
new SimpleDateFormat("EEE MMM dd kk:mm:ss ZZZ yyyy"); 

new SimpleDateFormat("EEE MMM dd kk:mm:ss Z yyyy"); 

仍然運行。但是,如果您的代碼拋出異常,那是因爲您的工具或jdk或其他原因。因爲我得到了同樣的錯誤在我的IDE,但請ZZZ檢查這些http://ideone.com/Y2cRr(在線IDE),並與Z

輸出爲:Thu Sep 28 11:29:30 GMT 2000

+0

你說得對,我的IDE是NetBean3.9,運行完全相同的代碼時,在線IDE不會產生錯誤。 – 2010-12-21 05:32:12

+0

我也有同樣的問題。我知道這種感覺:)正確的代碼,但錯誤的輸出。更新你的jdk不會有任何問題 – 2010-12-21 05:36:58

3

我有這個問題,我設置了LocaleUS,然後這行得通。

static DateFormat visitTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.US); 

String"Sun Jul 08 00:06:30 UTC 2012"

+0

我必須設置Locale.US也爲新的SimpleDateFormat(「EEE MMM dd HH:mm:ss Z yyyy」,Locale.US)解析「Wed Jan 25 11:13:11 +0100 2012「 – OneWorld 2012-07-26 21:11:58

7
String target = "27-09-1991 20:29:30"; 
DateFormat df = new SimpleDateFormat("dd MM yyyy HH:mm:ss"); 
Date result = df.parse(target); 
System.out.println(result); 

也能正常工作?

+7

我想你的意思是:」dd-MM-yyyy HH:mm:ss「 – Sergio 2015-08-12 11:00:27

0

解析異常是一個checked異常,所以你必須分析字符串到日期作業時,一個try-catch抓住它,因爲@miku建議...