Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating days between two dates with Java

I want a Java program that calculates days between two dates.

  1. Type the first date (German notation; with whitespaces: "dd mm yyyy")
  2. Type the second date.
  3. The program should calculates the number of days between the two dates.

How can I include leap years and summertime?

My code:

import java.util.Calendar; import java.util.Date; import java.util.Scanner;  public class NewDateDifference {      public static void main(String[] args) {          System.out.print("Insert first date: ");         Scanner s = new Scanner(System.in);         String[] eingabe1 = new String[3];          while (s.hasNext()) {             int i = 0;             insert1[i] = s.next();             if (!s.hasNext()) {                 s.close();                 break;             }             i++;         }          System.out.print("Insert second date: ");         Scanner t = new Scanner(System.in);         String[] insert2 = new String[3];          while (t.hasNext()) {             int i = 0;             insert2[i] = t.next();             if (!t.hasNext()) {                 t.close();                 break;             }             i++;         }          Calendar cal = Calendar.getInstance();          cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert1[0]));         cal.set(Calendar.MONTH, Integer.parseInt(insert1[1]));         cal.set(Calendar.YEAR, Integer.parseInt(insert1[2]));         Date firstDate = cal.getTime();          cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert2[0]));         cal.set(Calendar.MONTH, Integer.parseInt(insert2[1]));         cal.set(Calendar.YEAR, Integer.parseInt(insert2[2]));         Date secondDate = cal.getTime();           long diff = secondDate.getTime() - firstDate.getTime();          System.out.println ("Days: " + diff / 1000 / 60 / 60 / 24);     } } 
like image 350
user3025448 Avatar asked Nov 23 '13 17:11

user3025448


People also ask

How do I calculate the number of days between two dates in Java 8?

In Java 8, we can use ChronoUnit. DAYS. between(from, to) to calculate days between two dates.


1 Answers

UPDATE: The original answer from 2013 is now outdated because some of the classes have been replaced. The new way of doing this is using the new java.time classes.

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MM yyyy"); String inputString1 = "23 01 1997"; String inputString2 = "27 04 1997";  try {     LocalDateTime date1 = LocalDate.parse(inputString1, dtf);     LocalDateTime date2 = LocalDate.parse(inputString2, dtf);     long daysBetween = Duration.between(date1, date2).toDays();     System.out.println ("Days: " + daysBetween); } catch (ParseException e) {     e.printStackTrace(); } 

Note that this solution will give the number of actual 24 hour-days, not the number of calendar days. For the latter, use

long daysBetween = ChronoUnit.DAYS.between(date1, date2) 

Original answer (outdated as of Java 8)

You are making some conversions with your Strings that are not necessary. There is a SimpleDateFormat class for it - try this:

SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy"); String inputString1 = "23 01 1997"; String inputString2 = "27 04 1997";  try {     Date date1 = myFormat.parse(inputString1);     Date date2 = myFormat.parse(inputString2);     long diff = date2.getTime() - date1.getTime();     System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS)); } catch (ParseException e) {     e.printStackTrace(); } 

EDIT: Since there have been some discussions regarding the correctness of this code: it does indeed take care of leap years. However, the TimeUnit.DAYS.convert function loses precision since milliseconds are converted to days (see the linked doc for more info). If this is a problem, diff can also be converted by hand:

float days = (diff / (1000*60*60*24)); 

Note that this is a float value, not necessarily an int.

like image 184
influjensbahr Avatar answered Sep 19 '22 15:09

influjensbahr