Calculating days between two dates with Java

前端 未结 11 1457
天命终不由人
天命终不由人 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 04:54
    String dateStart = "01/14/2015 08:29:58";
    String dateStop = "01/15/2015 11:31:48";
    
    //HH converts hour in 24 hours format (0-23), day calculation
    SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    
    Date d1 = null;
    Date d2 = null;
    
    d1 = format.parse(dateStart);
    d2 = format.parse(dateStop);
    
    //in milliseconds
    long diff = d2.getTime() - d1.getTime();
    
    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000) % 24;
    long diffDays = diff / (24 * 60 * 60 * 1000);
    
    System.out.print(diffDays + " days, ");
    System.out.print(diffHours + " hours, ");
    System.out.print(diffMinutes + " minutes, ");
    System.out.print(diffSeconds + " seconds.");
    
    0 讨论(0)
  • 2020-11-22 04:54

    When I run your program, it doesn't even get me to the point where I can enter the second date.

    This is simpler and less error prone.

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Test001 {
    
        public static void main(String[] args) throws Exception {
    
            BufferedReader br = null;
    
            br = new BufferedReader(new InputStreamReader(System.in));
            SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy");
    
            System.out.println("Insert first date : ");
            Date dt1 = sdf.parse(br.readLine().trim());
    
            System.out.println("Insert second date : ");
            Date dt2 = sdf.parse(br.readLine().trim());
    
            long diff = dt2.getTime() - dt1.getTime();
    
            System.out.println("Days: " + diff / 1000L / 60L / 60L / 24L);
    
            if (br != null) {
                br.close();
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:02

    Java date libraries are notoriously broken. I would advise to use Joda Time. It will take care of leap year, time zone and so on for you.

    Minimal working example:

    import java.util.Scanner;
    import org.joda.time.DateTime;
    import org.joda.time.Days;
    import org.joda.time.LocalDate;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    
    public class DateTestCase {
    
        public static void main(String[] args) {
    
            System.out.print("Insert first date: ");
            Scanner s = new Scanner(System.in);
            String firstdate = s.nextLine();
            System.out.print("Insert second date: ");
            String seconddate = s.nextLine();
    
            // Formatter
            DateTimeFormatter dateStringFormat = DateTimeFormat
                    .forPattern("dd MM yyyy");
            DateTime firstTime = dateStringFormat.parseDateTime(firstdate);
            DateTime secondTime = dateStringFormat.parseDateTime(seconddate);
            int days = Days.daysBetween(new LocalDate(firstTime),
                                        new LocalDate(secondTime)).getDays();
            System.out.println("Days between the two dates " + days);
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:03

    Most / all answers caused issues for us when daylight savings time came around. Here's our working solution for all dates, without using JodaTime. It utilizes calendar objects:

    public static int daysBetween(Calendar day1, Calendar day2){
        Calendar dayOne = (Calendar) day1.clone(),
                dayTwo = (Calendar) day2.clone();
    
        if (dayOne.get(Calendar.YEAR) == dayTwo.get(Calendar.YEAR)) {
            return Math.abs(dayOne.get(Calendar.DAY_OF_YEAR) - dayTwo.get(Calendar.DAY_OF_YEAR));
        } else {
            if (dayTwo.get(Calendar.YEAR) > dayOne.get(Calendar.YEAR)) {
                //swap them
                Calendar temp = dayOne;
                dayOne = dayTwo;
                dayTwo = temp;
            }
            int extraDays = 0;
    
            int dayOneOriginalYearDays = dayOne.get(Calendar.DAY_OF_YEAR);
    
            while (dayOne.get(Calendar.YEAR) > dayTwo.get(Calendar.YEAR)) {
                dayOne.add(Calendar.YEAR, -1);
                // getActualMaximum() important for leap years
                extraDays += dayOne.getActualMaximum(Calendar.DAY_OF_YEAR);
            }
    
            return extraDays - dayTwo.get(Calendar.DAY_OF_YEAR) + dayOneOriginalYearDays ;
        }
    }
    
    0 讨论(0)
  • 2020-11-22 05:06

    Simplest way:

    public static long getDifferenceDays(Date d1, Date d2) {
        long diff = d2.getTime() - d1.getTime();
        return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
    }
    
    0 讨论(0)
  • 2020-11-22 05:06

    Use:

    public int getDifferenceDays(Date d1, Date d2) {
        int daysdiff = 0;
        long diff = d2.getTime() - d1.getTime();
        long diffDays = diff / (24 * 60 * 60 * 1000) + 1;
        daysdiff = (int) diffDays;
        return daysdiff;
    }
    
    0 讨论(0)
提交回复
热议问题