使用java.sql.date从当前日期开始添加1个月

使用java.sql.date从当前日期开始添加1个月,java,mysql,date,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,则my MySQL中的结果为2016-03-05。 但是,如果我想使用此行代码从当前日期添加1个月(对于我的情况,总是31天) java.sql.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,则my 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。任何人都可以帮助我这个结果有什么问题???

解决您问题的一个方法是使用
date\u ADD()函数更改MySQL中的日期:

DATE_ADD(yourDate, INTERVAL 1 MONTH)

解决问题的一个方法是使用
date\u ADD()
函数更改MySQL中的日期:

DATE_ADD(yourDate, INTERVAL 1 MONTH)

您的解决方案的问题在于您没有在
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
天添加到当前日期的计算。如果您希望增加一个月,它可以是
30
28
29
天,那么您可能应该使用
日历

今日日期:

2016-02-27
输出:

2016-03-29

您的解决方案的问题在于您没有在
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
天添加到当前日期的计算。如果您希望增加一个月,它可以是
30
28
29
天,那么您可能应该使用
日历

今日日期:

2016-02-27
输出:

2016-03-29
使用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Date result = cal.getTime();
使用日历:

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

您可以使用日历执行以下操作:

Date kini = new Date(); 
Calendar cal = Calendar.getInstance();
cal.setTime(kini);
cal.add(Calendar.DATE, 7); // add 10 days, e.g. 1 week
cal.add(Calendar.DATE, 31); // add 31 days, e.g. ~1 month
java.sql.Date jadwalPengobatan = new java.sql.Date(cal.getTime());

另请参见。

您可以使用
日历执行以下操作:

Date kini = new Date(); 
Calendar cal = Calendar.getInstance();
cal.setTime(kini);
cal.add(Calendar.DATE, 7); // add 10 days, e.g. 1 week
cal.add(Calendar.DATE, 31); // add 31 days, e.g. ~1 month
java.sql.Date jadwalPengobatan = new java.sql.Date(cal.getTime());
另请参见。

java.time 其他答案使用过时的日期时间类。在被证明是混乱的、麻烦的和有缺陷的之后,它们已经被Java8和更高版本中的java.time框架所取代

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

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

在的情况下,它假装只持有一个日期值,没有一天中的时间或时区。time类包括一个仅限真实日期的值,
LocalDate
。要将
java.sql.Date
转换为
java.time.LocalDate
,请调用

添加真实月份是内置的

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类型。

java.time 其他答案使用过时的日期时间类。在被证明是混乱的、麻烦的和有缺陷的之后,它们已经被Java8和更高版本中的java.time框架所取代

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

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

在的情况下,它假装只持有一个日期值,没有一天中的时间或时区。time类包括一个仅限真实日期的值,
LocalDate
。要将
java.sql.Date
转换为
java.time.LocalDate
,请调用

添加真实月份是内置的

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类型。

2月份怎么样?闰年呢?我知道,但这里他只想加上31天,他提到的问题与计算有关。我错过什么了吗?他从来没有提到31天。我认为在Java中使用
Calendar
或使用
DATE\u ADD()
是唯一的选择。使用我的代码,如果年份发生变化,会有任何问题吗?是的,您的解决方案现在适合我。。thanks@Dylan不,不会有问题的。唯一的一点是,它总是会在任何给定的日期后添加
31
天。2月份呢?闰年呢?我知道,但这里他只想加上31天,他提到的问题与计算有关。我错过什么了吗?他从来没有提到31天。我认为在Java中使用
Calendar
或使用
DATE\u ADD()
是唯一的选择。使用我的代码,如果年份发生变化,会有任何问题吗?是的,您的解决方案现在适合我。。thanks@Dylan不,不会有问题的。唯一的一点是,它总是会在任何给定的日期上添加
31
天。
mysql
标记在这里是不合适的。您应该通过Java 8这样做:
timeStamp