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

以下是输出,显示月份和年份不会从已弃用的DateYy()和getMonth()方法返回正确:

Year: 111
Month: 11
Day: 25
2011-12-25
Thu Dec 25 00:00:00 EST 111

由于我不能使用我上面尝试的构造函数,并且没有GregorianCalendar构造函数只需要一个Date,那么我如何将java.sql.Date对象转换成GregorianCalendar?

最佳答案
你必须这样做两步。首先使用默认构造函数创建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
Sun Dec 25 00:00:00 EST 2011

转载注明原文:如何将java.sql.Date对象转换为GregorianCalendar? - 代码日志