【问题标题】:Compare current date with date from MySQL DB using Java使用 Java 将当前日期与 MySQL DB 中的日期进行比较
【发布时间】:2020-05-15 07:35:01
【问题描述】:

我有一个 MySQL 数据库,其中包含几列,其中一列带有到期日期。我正在使用类型 'sql.date' 或 MySQL 的 date 类型。

现在根据业务逻辑,我想弄清楚两件事-

  1. 产品的有效期还有多少天和
  2. 产品是否已经过期。
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 &lt; ?"); 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 APILocalDate

标签: java mysql date jdbc


【解决方案1】:

这可以通过使用正确的 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();

这会将数据库中的值(应类似于 1589522424053)与 currentTime 变量的值(应类似于 1589532467163)进行比较。

【讨论】:

  • 所以我基本上需要编辑表的结构并将列从 Date 更改为数据类型 BIGINT ?如果是这样,到目前为止,它会搞砸很多工作,因为该表是从各种来源使用的。
  • @Chris 遗憾的是,这就是该解决方案所涉及的内容,我建议使用脚本将所有内容复制到另一个表或使用 MySQL alter 命令更改表中的日期列。
  • 谢谢我改变了它并得到了正确的结果。我还有一个问题是如何获得这些日期之间的差异,例如,如果一个已过期,另一个是当前日期。
  • @Chris 我相信您可以在几秒钟内获得差异:int diffInSecs = (int)((currentTime - rs2.getLong("expiry_date")) / 1000)。然后,您可以将此值除以 60 以获得分钟等。
猜你喜欢
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多