我以为我可以使用占用年,月和日的构造函数创建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}}?
答案 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)
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(date.getTime());
我认为这是最简单的方法。