如何使用 java 计算数据库中的日期与当前日期之间的天数差异
How to calculate difference in days between the one from database and current date using java
我从数据库中检索日期(使用 mysql)
java.sql.Date dbSqlDateLastRecord = result.getDate("date");
java.util.Date LastRecord = new java.util.Date(dbSqlDateLastRecord.getTime());
并获取当前日期
LocalDate today = LocalDate.now();
但是我没有找到如何计算这两者之间的天数差异。怎么做到的? 'difference' 我的意思是如果我有以下两个:2018-05-25" 和 "2018-05-24" 我会得到 1.
你的意思是:
java.sql.Date dbSqlDateLastRecord = result.getDate("date");
//Convert java.sql.Date to LocaDate
LocalDate dateDB = dbSqlDateLastRecord.toLocalDate();
LocalDate dateSS = LocalDate.now();
然后你可以得到它们之间的区别:
import java.time.Duration;
...
long days = Duration.between(dateDB.atStartOfDay(), dateSS.atStartOfDay()).toDays();
或:
import java.time.temporal.ChronoUnit;
...
long days = ChronoUnit.DAYS.between(dateDB, dateSS);
不要使用 java.sql.Date
。不要使用 java.util.Date
。 类 都已经过时了。也不要使用任何转换。从数据库中获取一个LocalDate
:
LocalDate dateDB = result.getObject("date", LocalDate.class);
这至少需要 Java 8,至少 JDBC 4.2。我猜你在那里很久了。然后按照 进行操作,例如:
long days = ChronoUnit.DAYS.between(dateDB, dateSS);
也只需将 LocalDate
存储回您的数据库,例如
yourPreparedStatement.setObject(4, LocalDate.now(yourZoneId));
我从数据库中检索日期(使用 mysql)
java.sql.Date dbSqlDateLastRecord = result.getDate("date");
java.util.Date LastRecord = new java.util.Date(dbSqlDateLastRecord.getTime());
并获取当前日期
LocalDate today = LocalDate.now();
但是我没有找到如何计算这两者之间的天数差异。怎么做到的? 'difference' 我的意思是如果我有以下两个:2018-05-25" 和 "2018-05-24" 我会得到 1.
你的意思是:
java.sql.Date dbSqlDateLastRecord = result.getDate("date");
//Convert java.sql.Date to LocaDate
LocalDate dateDB = dbSqlDateLastRecord.toLocalDate();
LocalDate dateSS = LocalDate.now();
然后你可以得到它们之间的区别:
import java.time.Duration;
...
long days = Duration.between(dateDB.atStartOfDay(), dateSS.atStartOfDay()).toDays();
或:
import java.time.temporal.ChronoUnit;
...
long days = ChronoUnit.DAYS.between(dateDB, dateSS);
不要使用 java.sql.Date
。不要使用 java.util.Date
。 类 都已经过时了。也不要使用任何转换。从数据库中获取一个LocalDate
:
LocalDate dateDB = result.getObject("date", LocalDate.class);
这至少需要 Java 8,至少 JDBC 4.2。我猜你在那里很久了。然后按照
long days = ChronoUnit.DAYS.between(dateDB, dateSS);
也只需将 LocalDate
存储回您的数据库,例如
yourPreparedStatement.setObject(4, LocalDate.now(yourZoneId));