Как преобразовать объект 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
?
Ответы
Ответ 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());
Я думаю, что это самый простой способ.