2012-02-02 1 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() и getMonth() методы Date:

Год: 111
месяц: 11
день: 25
2011-12-25
Чт 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
вс 25 декабря 00:00:00 EST 2011

3

Я собираюсь из памяти, но у вас проверено

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

Откуда произошел переход от rs.getDate()? –

+1

sorry - rs - это имя переменной, которое я всегда даю объектам ResultSet, - это просто представит экземпляр java.sql.Date, который вы уже создали. – DaveH

+0

Не самый конкретный ответ, но +1 для следующих стандартов, которые сделали именно точный код, который я искал. – KjetilNordin

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()); 

Я думаю, что это самый простой способ.