gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:43 25 4
gpt4 key购买 nike

您好,我对 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。谁能帮我看看这个结果有什么问题??

最佳答案

java.time

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

不要在您的业务逻辑中使用 java.sql 类。它们是那些旧的日期时间类的困惑扩展,并且是一种设计糟糕的 hack。仅将它们用于将数据传入/传出数据库。立即转换为 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.sqljava.time 转换。

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

关于java - 使用 java.sql.Date 从当前日期添加 1 个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com