21

我以为我可以使用带有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
Thu Dec 25 00:00:00 EST 111

由于我不能使用上面尝试过的构造函数,并且没有GregorianCalendar只需要 a的构造函数,Date我怎样才能将java.sql.Date对象转换为 a GregorianCalendar

4

4 回答 4

35

您必须分两步执行此操作。首先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
2011 年 12 月 25 日星期日 00:00:00 EST

于 2012-02-02T16:25:28.983 回答
4

我是凭记忆去的,但你试过吗

Calendar cal = GregorianCalendar.getInstance();
cal.setTime(rs.getDate());
于 2012-02-02T16:28:14.653 回答
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());
    }
}
于 2012-02-02T16:32:00.910 回答
2

使用setTimeInMillis()

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

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

于 2014-01-22T13:38:28.783 回答