1

I retrieve the date from database (using mysql)

java.sql.Date dbSqlDateLastRecord = result.getDate("date");

java.util.Date LastRecord = new java.util.Date(dbSqlDateLastRecord.getTime());  

and also get a present date

LocalDate today = LocalDate.now(); 

However I didn't find how to calculate the difference in days between those two. How it can be done? By 'difference' I mean that if I have the following two: 2018-05-25" and "2018-05-24" I will get 1.

Youcef LAIDANI
  • 55,661
  • 15
  • 90
  • 140
student
  • 37
  • 6
  • Please search before asking. Similar questions have been asked and answered many times before. For example [Calculate days between two dates in Java 8](https://stackoverflow.com/questions/27005861/calculate-days-between-two-dates-in-java-8). – Ole V.V. May 26 '18 at 09:43

2 Answers2

3

You mean :

java.sql.Date dbSqlDateLastRecord = result.getDate("date");

//Convert java.sql.Date to LocaDate
LocalDate dateDB = dbSqlDateLastRecord.toLocalDate();

LocalDate dateSS = LocalDate.now();

Then you can Get difference between them :

import java.time.Duration;
...
long days = Duration.between(dateDB.atStartOfDay(), dateSS.atStartOfDay()).toDays();

Or :

import java.time.temporal.ChronoUnit;
...
long days = ChronoUnit.DAYS.between(dateDB, dateSS);
Youcef LAIDANI
  • 55,661
  • 15
  • 90
  • 140
  • Thank you!! To send to database a new date, How to convert java's LocalDate to that of database? something like:"java.sql.Date dateDB = dbSqlDateLastRecord.something(); " – student May 26 '18 at 08:49
  • 1
    @student you mean `java.sql.Date dbSqlDateLastRecord = java.sql.Date.valueOf(LocalDate.now());` – Youcef LAIDANI May 26 '18 at 08:51
  • As of JDBC 4.2, no need to ever use `java.sql.Date` at all. Use `java.time.LocalDate` instead. – Basil Bourque May 27 '18 at 16:46
  • yes @BasilBourque I agree Ole V.V. already mention that, I just want to show to OP how to solve his problem – Youcef LAIDANI May 27 '18 at 16:56
2

Don’t use java.sql.Date. Don’t use java.util.Date. Both classes are long outdated. Also don’t use any conversions. Get a LocalDate from the database:

    LocalDate dateDB = result.getObject("date", LocalDate.class);

This requires at least Java 8 and at lease JDBC 4.2. My guess is you’re long there. Then proceed as in YCF_L’ answer, for example:

    long days = ChronoUnit.DAYS.between(dateDB, dateSS);

Also just store a LocalDate back into your database, for example

    yourPreparedStatement.setObject(4, LocalDate.now(yourZoneId));
Ole V.V.
  • 81,772
  • 15
  • 137
  • 161