2009-04-14 100 views
3

我似乎無法看到下面的示例代碼的問題。出於某種原因,似乎忽略了一年,並說日期相同,如下面的輸出所示。我必須錯過簡單的東西。java字符串datetime轉換問題

2006年1月28日
2007年1月16日
星期二4月1日00:00:00 PDT 2008
星期二4月1日00:00:00 PDT 2008

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

    class ExampleProgram { 
     public static void main(String[] args){ 
     DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
     String d1String = "01/28/2006"; 
     String d2String = "01/16/2007"; 
     System.out.println(d1String); 
     System.out.println(d2String); 
     Date d1=null; 
     try { 
      d1 = df.parse(d1String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     }   
     Date d2=null; 
     try { 
      d2 = df.parse(d2String); 
     } catch (ParseException e) {     
      System.out.println(e.getMessage()); 
     } 
     System.out.println(d1); 
     System.out.println(d2); 
     System.out.println("done"); 
     } 
    } 
+0

一個愚人節玩笑?這似乎是非常設計的,日期對應於4月1日。+ 1年,-12個月==同日期。 如果你的dateformat對象是嚴格的(df.setLenient(false)),那麼它會引發你的錯誤。 – evnafets 2009-04-14 04:31:38

回答

6
"dd/MM/yyyy" 

應改爲:

"MM/dd/yyyy" 
+0

我怎麼錯過了....謝謝!! – 2009-04-14 03:53:50

0

你可以嘗試聲明你的日期爲Date對象。

+1

他做到了。構造函數Date(String)已棄用。他使用正確的方式將字符串轉換爲日期。 – 2009-04-17 19:21:04

1

的原因,這是不給你,你所期待的是像彼得說,SimpleDateFormat應該讀"MM/dd/yyyy"

,其結果是說,它們看起來是平等的原因是是由於您的格式因爲它"dd/MM/yyyy",d1String的月是28.它需要28 - 12,增加一年,16 - 12,再增加一年,結果是4(4月),現在是2008年。同樣的事情爲d2String