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

时间:2012-02-02 16:24:06

标签: java date calendar 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());
    }
}

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

  

年份:111
  月:11
  日:25
  2011-12-25
  美国东部时间12月25日00:00:00

由于我无法使用上面尝试的构造函数,并且没有GregorianCalendar构造函数只需要Date,我如何将java.sql.Date对象转换为{{{} 1}}?

4 个答案:

答案 0 :(得分:32)

您必须分两步完成此操作。首先使用默认构造函数创建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

答案 1 :(得分:4)

我要从记忆中走出来,但你试过吗

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

答案 2 :(得分:4)

试试这个。

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 :(得分:1)

使用setTimeInMillis()

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

我认为这是最简单的方法。

相关问题