'I can't do math with calendar method in Java, but got the "java: bad operand types for binary operator '-'" error

I'm trying to make a code that tells me how many days left for me to go college, but I am not able to do it with the current date. I can easily make it by setting a date, but I want the current date, so I have to use the calendar method, but can't do math using it. My code:

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    Calendar calendar = Calendar.getInstance();
    Date start = sdf.parse("10/06/2022");
    System.out.println(start - calendar.getTime());


Solution 1:[1]

tl;dr

ChronoUnit.DAYS.between( 
    LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) , 
    LocalDate.parse( "10/06/2022" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ) 
) 

Details

You are using terrible date-time classes that were years ago supplanted by the modern java.time classes defined in JSR 310. Never use Date/Calendar.

Also, you are attempting to use a date-time class representing a date with time-of-day as seen in UTC (offset of zero) to hold a date-only value. Square peg, round hole.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate graduationDate = LocalDate.parse( "10/06/2022" , f ) ;

Determine today's date. That requires a time zone. For any given moment, the date varies around the globe by time zone.

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;  // Or ZoneId.systemDefault()
LocalDate today = LocalDate.now( z ) ;

Calculate elapsed time using java.time.temporal.ChronoUnit.

long days = ChronoUnit.DAYS.between( today , graduationDate ) ;

See this code run live at IdeOne.com.

graduationDate: 2022-06-10
today: 2022-03-05
days: 97

Tip: Learn about the ISO 8601 standard for exchanging date-time values as text.

Solution 2:[2]

    Calendar calendar = Calendar.getInstance();   
    Calendar collegeDate = Calendar.getInstance();
    collegeDate.set(Calendar.DATE,10);
    collegeDate.set(Calendar.MONTH, 5);
    collegeDate.set(Calendar.YEAR, 2022);
    System.out.println(Duration.between(calendar.toInstant(), collegeDate.toInstant()).toDays());

Solution 3:[3]

You can try this

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Calendar calendar = Calendar.getInstance();
        Date start = sdf.parse("10/06/2022");

        long dif = Math.abs(calendar.getTimeInMillis() - start.getTime());
        long result = TimeUnit.DAYS.convert(dif, TimeUnit.MILLISECONDS);

        System.out.println(result);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3