我尝试使用java calendar
,我试图在特定日期之后的7天内计算如下:
java.sql.Timestamp lastDate= Timestamp.valueOf("2015-12-28 00:00:00.0");
我有一个批处理作业,它运行并更新该日期每周发生一次。我这样做的方式如下:
Calendar calNextDate = Calendar.getInstance();
calNextDate.setTime(new java.util.Date(lastDate.getTime()));
calNextDate.add(Calendar.DAY_OF_MONTH, 7);
System.out.println(new Timestamp(calNextDate.getTime().getTime()));
输出:
2016-01-04 00:00:00.0
但是当我使用相同的功能计算2014年时,日期是:
2015-01-05 00:00:00.0
我已经在两个案件上增加了7天但是在2014年的情况下,1天是关闭的,为什么会这样?提前致谢。
答案 0 :(得分:1)
我没有看到问题。
以下是您所描述但未发布的代码的重新创建。
java.sql.Timestamp ts2013 = Timestamp.valueOf ( "2013-12-28 00:00:00.0" );
java.sql.Timestamp ts2014 = Timestamp.valueOf ( "2014-12-28 00:00:00.0" );
java.sql.Timestamp ts2015 = Timestamp.valueOf ( "2015-12-28 00:00:00.0" );
Calendar cal2013 = Calendar.getInstance ( );
cal2013.setTime ( new java.util.Date ( ts2013.getTime ( ) ) );
cal2013.add ( Calendar.DAY_OF_MONTH, 7 );
java.sql.Timestamp ts2013Plus = new Timestamp ( cal2013.getTime ( ).getTime ( ) );
System.out.println ( ts2013 + " + 7 = " + ts2013Plus );
Calendar cal2014 = Calendar.getInstance ( );
cal2014.setTime ( new java.util.Date ( ts2014.getTime ( ) ) );
cal2014.add ( Calendar.DAY_OF_MONTH, 7 );
java.sql.Timestamp ts2014Plus = new Timestamp ( cal2014.getTime ( ).getTime ( ) );
System.out.println ( ts2014 + " + 7 = " + ts2014Plus );
Calendar cal2015 = Calendar.getInstance ( );
cal2015.setTime ( new java.util.Date ( ts2015.getTime ( ) ) );
cal2015.add ( Calendar.DAY_OF_MONTH, 7 );
java.sql.Timestamp ts2015Plus = new Timestamp ( cal2015.getTime ( ).getTime ( ) );
System.out.println ( ts2015 + " + 7 = " + ts2015Plus );
运行时,此代码始终为第4个。
2013-12-28 00:00:00.0 + 7 = 2014-01-04 00:00:00.0
2014-12-28 00:00:00.0 + 7 = 2015-01-04 00:00:00.0
2015-12-28 00:00:00.0 + 7 = 2016-01-04 00:00:00.0
我的结论是你的问题出在其他地方。
我强烈建议在Java 8及更高版本中使用新的java.time包。然后,您可以完全避免java.util.Date/.Calendar。
的混乱java.sql.Timestamp类已经使用新方法进行了增强,可以轻松地转换为java.time类型和从java.time类型转换。
最终将更新JDBC驱动程序以直接处理java.time数据类型。