Calculating days between two dates with Java

前端 未结 11 1516
天命终不由人
天命终不由人 2020-11-22 04:42

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
11条回答
  •  别跟我提以往
    2020-11-22 05:10

    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.

提交回复
热议问题