【发布时间】:2020-05-15 07:35:01
【问题描述】:
我有一个 MySQL 数据库,其中包含几列,其中一列带有到期日期。我正在使用类型 'sql.date' 或 MySQL 的 date 类型。
现在根据业务逻辑,我想弄清楚两件事-
- 产品的有效期还有多少天和
- 产品是否已经过期。
java.sql.Date date = new java.sql.Date(new java.util.Date().getTime());
我可以使用它获取当前日期,但我无法使用下面给出的查询将它与到期日期进行比较。
rs = statement.executeQuery("SELECT * FROM Checkout where expiry_date <= date ");
我还尝试用 SQL 方法 now() 和 curdate() 替换 date 变量,但无济于事。
我是 JAVA 领域的新手,所以请帮忙。如果需要更多信息,我很乐意提供。
编辑
这个也试过了-
long millis=System.currentTimeMillis();
java.sql.Date date=new java.sql.Date(millis);
ResultSet rs2 = null;
PreparedStatement stmt = null;
stmt = connection.prepareStatement("SELECT * FROM Checkout where expiry_date < ?;");
stmt.setDate(1, date);
rs2 = stmt.executeQuery();
但还是不行。
在前 50 条 50 条建议中,我无法解决问题。
【问题讨论】:
-
是与 java 位置不同的服务器时间/时区。
SELECT NOW()看看你与 java 实现相比得到了什么。 -
我通过执行
Select now()得到了这个2020-05-15 13:09:45,这与我的机器时间相同。curdate()在这种情况下对我更有帮助,因为我只需要日期。 -
我也试过了-
java.sql.Date date = new java.sql.Date(new java.util.Date().getTime()); PreparedStatement stmt = null; stmt = connection.prepareStatement("SELECT * FROM Checkout where expiry_date < ?"); stmt.setDate(1, date); rs2 = stmt.executeQuery(); -
我使用 expiry_date 作为 mysql 表中的 BIGINT 数据类型并将其与 Calender#getInstance()#getTime()#getTime() 的 long 值进行比较
-
我建议你不要使用
java.sql.Date。该课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的LocalDate。