2012-02-02 109 views
19

我想我可以創建一個GregorianCalendar使用年份,月份和日期的構造函數,但我不能可靠地從java.sql.Date類的實例獲取這些字段。這得到java.sql.Date這些值的方法已被棄用,並將下面的代碼說明了爲什麼它們不能被用於:如何將java.sql.Date對象轉換爲GregorianCalendar?

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println("Year: " + date.getYear()); 
     System.out.println("Month: " + date.getMonth()); 
     System.out.println("Day: " + date.getDate()); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(date.getYear(), date.getMonth(), date.getDate()); 
     System.out.println(cal.getTime()); 
    } 
} 

這裏的輸出,顯示出年份和月份沒有從棄用getYear()和正確返回的DategetMonth()方法:

年:111
月:11
日:25
2011-12-25
週四12月25日00:00:00 EST 111

既然不能用,我試過上面的構造,而且也沒有GregorianCalendar構造函數,只是需要Date,我怎麼能轉換java.sql.Date對象成GregorianCalendar

回答

32

你必須在兩個步驟中做到這一點。首先使用默認構造函數創建一個GregorianCalendar,然後使用(易混淆命名的)setTime方法設置日期。

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 

下面是輸出:

2011-12-25
太陽12月25日00:00:00 EST 2011

3

我從內存中去,但你試過

Calendar cal = GregorianCalendar.getInstance(); 
cal.setTime(rs.getDate()); 
+1

從哪裏rs.getDate()來自哪裏? – 2012-02-02 16:45:01

+1

抱歉 - rs是我總是給予ResultSet對象的變量名 - 它只是代表您已經實例化的java.sql.Date實例。 – DaveH 2012-02-02 20:43:14

+0

並不是最具體的答案,但+1是遵循一些標準,這使得我正在尋找確切的代碼。 – KjetilNordin 2014-07-21 08:27:45

4

試試這個。

import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 

public class DateTester { 

    public static void main(String[] args) { 
     Date date = Date.valueOf("2011-12-25"); 
     System.out.println(date); 

     Calendar cal = new GregorianCalendar(); 
     cal.setTime(date); 
     System.out.println(cal.getTime()); 
    } 
} 
1

使用setTimeInMillis()

java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); 
Calendar cal = new GregorianCalendar(); 
cal.setTimeInMillis(date.getTime()); 

我覺得這是最簡單的方法。