当前位置: 首页 > 知识库问答 >
问题:

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

邴姚石
2023-03-14

您好,我对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。任何人都可以帮助我这个结果有什么问题??

共有3个答案

朱和惬
2023-03-14

您的解决方案的问题在于您没有长时间进行计算。

您必须将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);
}

请注意,这只会修正将<code>31</code>天添加到当前日期的计算。如果您希望添加一个月,它可以是302829days,那么您也许应该使用日历

今天的日期:

2016-02-27

输出:

2016-03-29
公良弘毅
2023-03-14

使用日历:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Date result = cal.getTime();
祁远
2023-03-14

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

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

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

在<code>java.sql的情况下。Date,它假装持有一个只包含日期的值,没有一天中的时间,也没有时区。java。时间类包括一个仅限真实日期的值,LocalDate。从<code>转换为java.sql。日期到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驱动html" target="_blank">程序更新到直接支持java.time类型。那么java.sql类型将作为过去的旧遗物逐渐消失。但在此之前,我们需要执行这些java.sql ↔ java.time转换。

更新:JDBC 4.2及更高版本提供了传递java的功能。时间直接使用PreparedStatement::setObject进行输入,并使用ResultSet::getObject进行获取。因此无需转换为java。sql类型。

 类似资料:
  • 问题内容: 我阅读了moment.js的文档,如果您想从当前日期开始增加1个月,请使用此代码 但是现在的问题是,它没有正确正确地添加日期,例如,假设当前日期为2015年10月31日,请在代码中说明 如果您查看当前的日历时间,则该时间应为1个月 谁能给我一些关于如何解决此问题的意见。 谢谢 问题答案: 编辑

  • 问题内容: 我已经看过了,基本上我已经发现Calendar对象可以使用以下类似方法将1个月添加到指定的日期中: 尽管我不喜欢它在日期为30或31时的行为。如果我将1个月添加到01/31/2012,输出将变为02/29/2012。当我再增加1个月时,它将变为03/29/2012。 无论如何,我是否可以强制2012年2月29日自动变为2012年3月1日? 基本上这就是我想发生的事情: 默认日期:01/

  • 问题内容: 我需要将当前日期添加到JDBC调用的准备好的语句中。我需要以格式添加日期。 我试过了 但是我有这个错误: 有没有办法获取具有相同格式的对象? 问题答案: A 不是。相反。A 是一个。 您需要将其转换为使用,需要一个构造函数,一个可以提供。

  • 我有一个像20211231这样的当前日期格式,我想在这个日期上再加150天。在那之后,如果时间还不到150天,或者已经过去了,我怎么检查呢 我尝试这个代码添加150天到当前日期,但它失败了 idk如果它不再有效了,或者自从我读了一个9年零五个月前被问和回答的问题后又怎么样https://stackoverflow.com/a/11727986/17562398 这是我现在的约会对象

  • 问题内容: 我已经进行了所有设置,将当前日期存储到Java中的变量中。我要弄清楚的是如何存储当前日期之后1年的日期。 这是我当前的日期: 因此,例如,如果今天是今天,它将存储2/18/2013。我正在尝试存储日期2/18/2014。我将如何去做呢? 问题答案: 如果您不想拖动外部库,只需使用 请注意,如果日期是,并且您添加了1年,则将获得

  • 问题内容: 我一直在研究,但是找不到我的问题的确切解决方案。我一直在尝试从约会开始1小时前。如何迅速实现这一目标? 问题答案: 对于涉及NSDate的正确计算,要考虑到不同日历的所有极端情况(例如,在夏令时之间进行切换),应使用NSCalendar类: 迅捷3+ 较旧