Как преобразовать объект java.sql.Date в GregorianCalendar? - PullRequest
19 голосов
/ 02 февраля 2012

Я думал, что смогу создать GregorianCalendar, используя конструктор, который принимает год, месяц и день, но я не могу надежно получить эти поля из экземпляра java.sql.Date класс. Методы, которые получают эти значения из java.sql.Date, устарели, и следующий код показывает, почему их нельзя использовать:

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?

Ответы [ 4 ]

33 голосов
/ 02 февраля 2012

Вы должны сделать это в два этапа.Сначала создайте 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

4 голосов
/ 02 февраля 2012

Попробуйте это.

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());
    }
}
4 голосов
/ 02 февраля 2012

Я ухожу из памяти, но ты пробовал

Calendar cal = GregorianCalendar.getInstance();
cal.setTime(rs.getDate());
1 голос
/ 22 января 2014

Использование setTimeInMillis () :

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

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

...