使用java.sql.date从当前日期开始添加1个月
您好,我对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
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