使用java.sql.Date从当前日期添加1个月

时间:2016-02-27 10:35:22

标签: java mysql date

您好我的java.sql.Date结果有问题。这是我的代码,从当前日期开始增加1周

Date kini = new Date();
java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime()+7*24*60*60*1000);

如果当前日期是2016-02-27,那么我的MySQL中的结果是2016-03-05。 但是,如果我想使用此行代码从当前日期添加1个月(对于我的情况,它总是31天)

 java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime()+31*24*60*60*1000);

应该是2016-03-28,但我的MySQL结果是2016-02-05。任何人都可以帮我解决这个问题的错误吗?

6 个答案:

答案 0 :(得分:2)

java.time

其他答案使用过时的旧日期时间类。在证明令人困惑,麻烦和有缺陷之后,它们已被Java 8及更高版本中的java.time框架所取代。

不要在业务逻辑中使用 java.sql 类。它们是旧日期时间类的混乱扩展,是一个设计糟糕的黑客。仅用于将数据传入/传出数据库。立即转换为java.time类型。

要转换,请使用添加到旧类的新方法。

java.sql.Date的情况下,它假装保留一个仅限日期的值,没有时间或时区。 java.time类包含一个真正的仅日期值LocalDate。要从java.sql.Date转换为java.time.LocalDate,请致电java.sql.Date::toLocalDate

LocalDate ld = mySqlDate.toLocalDate();

内置添加真实月份。

LocalDate monthLater = ld.plusMonths( 1 );

转换回java.sql以存储在数据库中。

java.sql.Date sqlDate = java.sql.Date.valueOf( monthLater );

希望有一天我们会看到更新的JDBC驱动程序直接支持java.time类型。然后java.sql类型将逐渐消失,作为过去的旧文物。但在此之前,我们需要执行这些 java.sql java.time 转换。

更新:JDBC 4.2及更高版本提供了直接使用PreparedStatement::setObject传递java.time类型,并使用ResultSet::getObject获取。所以不需要转换为java.sql类型。

答案 1 :(得分:1)

使用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Date result = cal.getTime();

答案 2 :(得分:0)

您的问题的一个解决方案是使用DATE_ADD()函数更改MySQL中的日期:

DATE_ADD(yourDate, INTERVAL 1 MONTH)

答案 3 :(得分:0)

您的解决方案的问题在于您没有在long中进行计算。

您必须将31*24*60*60*1000替换为31l*24l*60l*60l*1000l

以下是更正后的代码段:

public static void main (String[] args)
{
    Date kini = new Date();
    java.sql.Date jadwalPengobatan = new java.sql.Date(kini.getTime() + 31l*24l*60l*60l*1000l);
    System.out.println(jadwalPengobatan);
}

请注意,这只会在您将31天添加到当前日期时进行计算。如果您希望添加一个月302829天,那么也许您应该使用Calendar

今天的日期:

2016-02-27

输出:

2016-03-29

答案 4 :(得分:0)

  SimpleDateFormat date= new SimpleDateFormat("dd/MM/yyyy");
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date()); 
    calendar.add(Calendar.MONTH, 1); 
    String output= date.format(calendar.getTime());

java.sql.Date jadwalPengobatan = new java.sql.Date(output);

答案 5 :(得分:0)

您可以使用window.history.go( )执行以下操作:

Calendar

另见this discussion