Java 如何使用hibernate添加从数据库中获取的日期

Java 如何使用hibernate添加从数据库中获取的日期,java,oracle,hibernate,Java,Oracle,Hibernate,我正在使用带有hibernate的rp.getStart_date()从Oracle数据库获取日期 现在我想给它加上15天并显示出来。但是由于cal.add()要求第一个参数为int,所以它在第二行向我显示numberFormatException..我该怎么做 Date dt=rp.getStart_date(); int s1=Integer.parseInt((dt.toString())); System.out.p

我正在使用带有hibernate的rp.getStart_date()从Oracle数据库获取日期 现在我想给它加上15天并显示出来。但是由于cal.add()要求第一个参数为int,所以它在第二行向我显示numberFormatException..我该怎么做

                    Date dt=rp.getStart_date();
        int s1=Integer.parseInt((dt.toString()));
        System.out.println(s1);
        SimpleDateFormat sdf=new SimpleDateFormat("dd-MM-yyyy");
        Calendar cal=Calendar.getInstance();
        cal.add(s1, 15);
        System.out.println(sdf.format(cal.getTime()));
请帮帮我

提前感谢..

试试看

Date             dt  = rp.getStart_date();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Calendar         cal = Calendar.getInstance();

cal.setTime(dt); 
cal.add(Calendar.DATE, 15);  // Add 15 days

String output = sdf.format(cal.getTime());
System.out.println("Output :: "+output);
被忽视的时区 答案很接近,但并不完全正确。问题和答案都没有考虑时区。如果忽略指定时区,则会得到JVM的默认时区。通过依赖默认时区,您可能会得到意外的结果

DST效应 java.util.Calendar的
add
方法保留一天中的小时数,并根据夏令时(DST)和其他可能的异常情况进行调整。所以,如果你使用一个时区(比如美国西海岸),在你的时间跨度内将夏令时改变一个小时,你实际上会多出/少出一个小时。也就是说,您添加15天的小时数结果是
((15*24)±1)

如果您一直期望
(15*24)
,您会感到惊讶(取决于JVM的默认时区)

示范 由于Joda Time中DateTime类上的
plusDays
方法具有相同的行为,因此我将演示如何使用Joda Time。无论如何,您应该避免使用java.util.Date和java.util.Calendar,但在这种情况下,行为与Joda Time相同

首先,请注意,来自另一个答案的代码可以像这样在Joda时间完成,在java.util.Date世界和Joda时间世界之间来回转换。但该代码具有相同的时区问题(受DST影响)

java.util.Date juDate=new java.util.Date();
java.util.Date juDateLater=new DateTime(juDate).plusDays(15).toDate();
现在使用纯Joda Time,让我们看看时区如何影响天数的增加。我们将运行此示例代码两次,首先按原样运行,然后通过注释掉第一行
时区并在其后启用该行来交换时区

//时区“美国/洛杉矶”从美国夏令时2014-03-09 02:00开始,提前到03:00。
DateTimeZone timeZone=DateTimeZone.forID(“美国/洛杉矶”);
//DateTimeZone timeZone=DateTimeZone.UTC;
DateTime DateTime_OneAM=新的日期时间(2014,3,9,1,0,0,时区);
DateTime DateTime\u OneAM\u Plus15=DateTime\u OneAM.plusDays(15);
DateTime DateTime_ThreeAM=新的日期时间(2014,3,9,3,0,0,时区);
DateTime DateTime_ThreeAM_Plus15=DateTime_ThreeAM.plusDays(15);
long millisElapsedOneAM=(dateTime_OneAM_Plus15.getMillis()-dateTime_OneAM.getMillis());
long milliselapsedthream=(dateTime\u ThreeAM\u Plus15.getMillis()-dateTime\u ThreeAM.getMillis());
长分钟=((毫微秒级三束-毫微秒级)/1000L/60L);
转储到控制台

System.out.println(“时区”+时区);
System.out.println(“dateTime\u OneAM”+dateTime\u OneAM+”(UTC/GMT:“+dateTime\u OneAM.toDateTime(DateTimeZone.UTC)+”);
System.out.println(“dateTime\u OneAM\u Plus15”+dateTime\u OneAM\u Plus15+”(UTC/GMT:“+dateTime\u OneAM\u Plus15.toDateTime(DateTimeZone.UTC)+”);
System.out.println(“”;//空行。
System.out.println(“dateTime\u ThreeAM”+dateTime\u ThreeAM+”(UTC/GMT:“+dateTime\u ThreeAM.toDateTime(DateTimeZone.UTC)+”);
System.out.println(“dateTime\u ThreeAM\u Plus15”+dateTime\u ThreeAM\u Plus15+”(UTC/GMT:“+dateTime\u ThreeAM\u Plus15.toDateTime(DateTimeZone.UTC)+”);
System.out.println(“”;//空行。
System.out.println(“millisElapsedOneAM”+millisElapsedOneAM);
System.out.println(“millisElapsedThreeAM”+millisElapsedThreeAM);
系统输出打印项次(“分钟”+分钟);
当使用第一个时区运行时,对于美国西海岸…
(请注意UTC中一天中的小时是如何变化的)

美国时区/洛杉矶
dateTime_OneAM 2014-03-09T01:00:00.000-08:00(UTC/GMT:2014-03-09T09:00:00.000Z)
日期时间2014-03-24T01:00:00.000-07:00(UTC/GMT:2014-03-24T08:00:00.000Z)
日期时间:2014-03-09T03:00:00.000-07:00(UTC/GMT:2014-03-09T10:00:00.000Z)
日期时间2014-03-24T03:00:00.000-07:00(UTC/GMT:2014-03-24T10:00:00.000Z)
毫塞勒波塞多涅姆1292400000
百万分之三组1296000000
60分钟
使用第二个时区运行时,对于UTC/GMT

时区UTC dateTime_OneAM 2014-03-09T01:00:00.000Z(UTC/GMT:2014-03-09T01:00:00.000Z) 日期时间2014-03-24T01:00:00.000Z(UTC/GMT:2014-03-24T01:00:00.000Z) 日期时间:2014-03-09T03:00:00.000Z(UTC/GMT:2014-03-09T03:00:00.000Z) 日期时间2014-03-24T03:00:00.000Z(UTC/GMT:2014-03-24T03:00:00.000Z) 毫塞勒波塞多涅姆1296000000 百万分之三组1296000000 第0分钟