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

时间:2014-01-28 16:58:12

标签: java oracle hibernate

我使用rp.getStart_date()和hibernate从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()));

请帮帮我..

提前致谢..

2 个答案:

答案 0 :(得分:2)

尝试,

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);

答案 1 :(得分:0)

被忽略的时区

answer by Rakesh KR已接近但不太正确。问题和答案都没有考虑时区。如果忽略指定时区,则会获得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-Time,在java.util.Date世界和Joda-Time世界之间进行转换。但是此代码具有相同的时区问题(受DST影响)。

java.util.Date juDate = new java.util.Date();
java.util.Date juDateLater = new DateTime( juDate ).plusDays( 15 ).toDate() ;

现在使用纯Joda-Time让我们来看看时区如何影响天数的增加。我们将按原样运行此示例代码两次,然后通过注释掉第一个timeZone行并在此之后启用该行来交换时区。

// Time zone "America/Los_Angeles" begins DST on 2014-03-09 02:00, springing ahead to 03:00.
DateTimeZone timeZone = DateTimeZone.forID( "America/Los_Angeles" );
//DateTimeZone timeZone = DateTimeZone.UTC;

DateTime dateTime_OneAM = new DateTime( 2014, 3, 9, 1, 0, 0, timeZone );
DateTime dateTime_OneAM_Plus15 = dateTime_OneAM.plusDays( 15 );

DateTime dateTime_ThreeAM = new DateTime( 2014, 3, 9, 3, 0, 0, timeZone );
DateTime dateTime_ThreeAM_Plus15 = dateTime_ThreeAM.plusDays( 15 );

long millisElapsedOneAM = ( dateTime_OneAM_Plus15.getMillis() - dateTime_OneAM.getMillis() );
long millisElapsedThreeAM = ( dateTime_ThreeAM_Plus15.getMillis() - dateTime_ThreeAM.getMillis() );
long minutes = ( ( millisElapsedThreeAM - millisElapsedOneAM ) / 1000L / 60L );

转储到控制台...

System.out.println( "timeZone " + timeZone );
System.out.println( "dateTime_OneAM " + dateTime_OneAM + " ( UTC/GMT: " + dateTime_OneAM.toDateTime( DateTimeZone.UTC ) + " )" );
System.out.println( "dateTime_OneAM_Plus15 " + dateTime_OneAM_Plus15 + " ( UTC/GMT: " + dateTime_OneAM_Plus15.toDateTime( DateTimeZone.UTC ) + " )" );
System.out.println( " " ); // Blank line.
System.out.println( "dateTime_ThreeAM " + dateTime_ThreeAM + " ( UTC/GMT: " + dateTime_ThreeAM.toDateTime( DateTimeZone.UTC ) + " )" );
System.out.println( "dateTime_ThreeAM_Plus15 " + dateTime_ThreeAM_Plus15 + " ( UTC/GMT: " + dateTime_ThreeAM_Plus15.toDateTime( DateTimeZone.UTC ) + " )" );
System.out.println( " " ); // Blank line.
System.out.println( "millisElapsedOneAM " + millisElapsedOneAM );
System.out.println( "millisElapsedThreeAM " + millisElapsedThreeAM );
System.out.println( "minutes " + minutes );

使用第一时区运行时,对于美国西海岸...
(请注意UTC中的每小时如何变化或不变化)

timeZone America/Los_Angeles
dateTime_OneAM 2014-03-09T01:00:00.000-08:00 ( UTC/GMT: 2014-03-09T09:00:00.000Z )
dateTime_OneAM_Plus15 2014-03-24T01:00:00.000-07:00 ( UTC/GMT: 2014-03-24T08:00:00.000Z )

dateTime_ThreeAM 2014-03-09T03:00:00.000-07:00 ( UTC/GMT: 2014-03-09T10:00:00.000Z )
dateTime_ThreeAM_Plus15 2014-03-24T03:00:00.000-07:00 ( UTC/GMT: 2014-03-24T10:00:00.000Z )

millisElapsedOneAM 1292400000
millisElapsedThreeAM 1296000000
minutes 60

使用第二时区运行时,表示UTC / GMT ...

timeZone UTC
dateTime_OneAM 2014-03-09T01:00:00.000Z ( UTC/GMT: 2014-03-09T01:00:00.000Z )
dateTime_OneAM_Plus15 2014-03-24T01:00:00.000Z ( UTC/GMT: 2014-03-24T01:00:00.000Z )

dateTime_ThreeAM 2014-03-09T03:00:00.000Z ( UTC/GMT: 2014-03-09T03:00:00.000Z )
dateTime_ThreeAM_Plus15 2014-03-24T03:00:00.000Z ( UTC/GMT: 2014-03-24T03:00:00.000Z )

millisElapsedOneAM 1296000000
millisElapsedThreeAM 1296000000
minutes 0