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