使用Java将当前日期与MySQL数据库中的日期进行比较

使用Java将当前日期与MySQL数据库中的日期进行比较,java,mysql,date,jdbc,Java,Mysql,Date,Jdbc,我有一个MySQL数据库,有几列,其中一列有过期日期。我使用的是'sql.date'类型或MySQL的日期类型 现在,根据业务逻辑,我试图找出两件事- 产品的有效期还有多少天 产品是否已经过期。 我可以使用此查询获取当前日期,但无法使用下面给出的查询将其与到期日期进行比较 rs = statement.executeQuery("SELECT * FROM Checkout where expiry_date <= date "); 但它仍然不起作用 在前50条建议中,我无法解决这个问题

我有一个MySQL数据库,有几列,其中一列有过期日期。我使用的是'sql.date'类型或MySQL的日期类型

现在,根据业务逻辑,我试图找出两件事-

产品的有效期还有多少天 产品是否已经过期。 我可以使用此查询获取当前日期,但无法使用下面给出的查询将其与到期日期进行比较

rs = statement.executeQuery("SELECT * FROM Checkout where expiry_date <= date ");
但它仍然不起作用


在前50条建议中,我无法解决这个问题。

这可以通过使用正确的MySQL数据类型和语句来实现。 正如我在评论中提到的,我建议使用expiry_date列的BIGINT数据类型。 在程序中,您需要执行以下操作:

long currentTime = Calendar.getInstance().getTime().getTime();
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM Checkout where expiry_date < ?");
stmt.setLong(1, currentTime);
ResultSet rs2 = stmt.executeQuery();

这将比较数据库中的值(看起来像158952244053)和currentTime变量的值(看起来像1589532467163)。

服务器时区与java位置不同。选择“现在”并查看与java实现相比得到了什么。我通过执行“现在选择”得到了这个2020-05-15 13:09:45,这与我的机器时间相同。在这种情况下,curdate对我更有用,因为我只需要日期;PreparedStatement stmt=null;stmt=connection.prepareStatement从到期日<的签出中选择*?;stmt.setDate1,日期;rs2=stmt.executeQuery;我这样做是因为expiry_date是mysql表中的BIGINT数据类型,并将其与CalenderGetInstanceGetTimeGetTime的长值进行比较。我建议您不要使用java.sql.date。那门课设计得很糟糕,而且早已过时。因此,我基本上需要编辑表的结构,并将列更改为数据类型BIGINT from Date?如果是这样的话,到目前为止,这将打乱大量的工作,因为该表是从各种来源使用的。@Chris遗憾的是,这就是这个解决方案所涉及的内容,我建议使用脚本将所有内容复制到另一个表中,或者使用MySQL alter命令更改表中的日期列。谢谢,我更改了它并得到了正确的结果。我还有一个问题是,如果一个日期过期,另一个日期是当前日期,我如何获得这些日期之间的差异。@Chris我相信要以秒为单位获得差异,可以这样做:int diffinsties=intcurrentTime-rs2.getLongExpirement\u date/1000。然后,您可以将该值除以60,得到分钟数等。
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();
long currentTime = Calendar.getInstance().getTime().getTime();
PreparedStatement stmt = connection.prepareStatement("SELECT * FROM Checkout where expiry_date < ?");
stmt.setLong(1, currentTime);
ResultSet rs2 = stmt.executeQuery();