2010-10-06 37 views
1

我收到日期如下格式,如Java字符串:Java的日期錯誤

週六1月1日00:00:00 CET 2000

我想將其轉換爲YYYY-MM-DD fromat。對於這個我做:

String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd"); 
try{ 
Date parsed = sdf.parse(strDate); 
}catch(Exception e){ 
System.out.println("Exception: " + e.getMessage()); 
} 

但我得到異常: 無法解析的日期:「星期六1月1日00:00:00 CET 2001年」

請給我一些這方面的解決方案。

謝謝

+0

如果你的語言環境是不是美國,看到我的答案:) – Fortega 2010-10-06 13:44:36

回答

8

SimpleDateFormat的需要是輸入日期格式,那麼你可以使用其他的SimpleDateFormat能得到相應的輸出格式,即:

String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd"); 
try{ 
    Date parsed = sdf.parse(strDate); 
} 
catch(Exception e){ 
    System.out.println("Exception: " + e.getMessage()); 
} 
System.out.println("Date: " + outputDate.format(parsed)); 
+0

嗨,絃樂臨時=「星期六1月1 00:00:00 CET 2000「; SimpleDateFormat sdf = new SimpleDateFormat(「EEE MMM dd HH:mm:ss zzz yyyy」); SimpleDateFormat outputDate = new SimpleDateFormat(「yyyy-MM-dd」); Date parsed = null; try { \t parsed = sdf.parse(temp); (例外e){ } catch(Exception e){0} {0} {0} System.out.println(「Exception:」+ e.getMessage()); } System.out.println(「Date:」+ outputDate.format(parsed)); – 2010-10-06 11:45:44

+0

我認爲我的編輯必須通過你的評論,像在晚上船舶;) – Lazarus 2010-10-06 11:46:59

+0

抱歉worng格式。我根據您的代碼進行了更改,但我仍然得到異常 – 2010-10-06 11:50:34

4

您正在嘗試用格式「yyyy-MM-dd」解析日期。

您需要構建一個與您需要解析的格式相匹配的SimpleDateFormat,然後在您的代碼片段中使用它來編寫format它。

你需要將沿着 「EEE MMM DD HH:MM:SSžYYYY」 東西線的解析格式。

4

你需要一個SimpleDateFormat解析現有的字符串,另一個的SimpleDateFormat到格式解析Date對象到適當的YYYY-MM-DD字符串。

您可以使用applyPattern更改SimpleDateFormat中的當前模式,以便您不必創建新對象。

我會留下模式作爲學生的練習。

1

您的模式需要與解析日期相匹配,如下所示: 請查看SimpleDateFormat文檔瞭解完整說明。您使用的

SimpleDateFormat sdf = new SimpleDateFormat ("EEE MMM dd hh:mm:ss zzz yyyy"); 
0

什麼Date類?如果您使用的是IDE,很容易意外地使用java.sql.Date而不是java.util.Date。這裏是我完整的示例程序和它的輸出:

package pkg; 

import java.lang.String; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class Foo 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Date parsed = null; 
     String strDate = "Sat Jan 01 00:00:00 CET 2001"; 
     SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); 
     SimpleDateFormat outputDate = new SimpleDateFormat("yyyy-MM-dd"); 
     try{ 
      parsed = sdf.parse(strDate); 
     } 
     catch(Exception e){ 
      System.out.println("Exception: " + e.getMessage()); 
     } 
     System.out.println("Date: " + outputDate.format(parsed)); 
    } 
} 

生產

日期:2000-12-31

這是正確的,因爲我在美國東部時間,除非我我錯了CET的位置。沒有遇到任何例外的解析類型或其他。

1

如果你的locale是不是美國或其他英語語言環境,你會得到一個例外,因爲星期六是不知道的,所以你應該指定你的輸入格式的語言環境。

試試這個:

String dateAsString = "Sat Jan 01 00:00:00 CET 2001"; 
SimpleDateFormat inputFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.US); 
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd"); 
System.out.println("Date: " + outputFormat.format(inputFormat.parse(dateAsString))); 

PS:2001年1月1日是不是一個週六:)