如何将java.sql.Date对象转换为GregorianCalendar?

Bil*_*ard 20 java calendar date gregorian-calendar

我以为我能够创建一个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());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出,显示从已弃用的方法getYear()getMonth()方法中未正确返回月份和年份Date:

年:111
月:11
日:25
2011-12-25
周四至周五25 00:00:00 EST 111

既然我不能使用上面尝试的构造函数,并且没有GregorianCalendar构造函数只需要一个Date,我怎样才能将一个java.sql.Date对象转换成一个GregorianCalendar

Bil*_*ard 33

你必须分两步完成.首先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());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

2011-12-25
Sun Dec 25 00:00:00 EST 2011