javajava-timechronounit

java chrono unit difference between year


i have below code to get difference between two years..

long yearsBetween = ChronoUnit.YEARS.between(
                customDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                LocalDate.now());

my date value is as below

customDate = 2022-03-07
LocalDate.now() = 2021-10-07

but when i execute ChronoUnit.YEARS.between, it returns "0", but i am expecting "1" as return value. i want to compare only years for the given date and get the difference, excluding days..


Solution

  • If you want to ignore the month and day components of the LocalDate, you can just get the year from each LocalDate and then compare them, like so:

    // Let's say we have two LocalDates, date1 and date2:
    LocalDate date1 = LocalDate.of(2021, 10, 6);
    LocalDate date2 = LocalDate.of(2022, 3, 7);
    
    // We can get the year for each object and then subtract the two years:
    long yearsBetween = date2.getYear() - date1.getYear();
    
    // This will print 1 because 2022 is 1 year ahead of 2021:
    System.out.println(yearsBetween);
    

    As a side note, there is no need for yearsBetween to be a long data type (64-bit integer). The getYear() method returns an int (32-bit integer), and I doubt you'll ever have to deal with years that far in the future. We can just use:

    int yearsBetween = date2.getYear() - date1.getYear();
    

    You can then just plug in your dates where date1 and date2 are like so:

    int yearsBetween = customDate.toInstant().atZone(ZoneId.systemDefault())
            .toLocalDate().getYear()
            - LocalDate.now().getYear();