Подтвердить что ты не робот

Как преобразовать объект java.sql.Date в GregorianCalendar?

Я думал, что смогу создать 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?

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Используйте setTimeInMillis():

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

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