public static boolean isSameLocalTime(final Calendar cal1, final Calendar cal2) {
        if (cal1 == null || cal2 == null) {
            throw new IllegalArgumentException("The date must not be null");
        }
        return cal1.get(Calendar.MILLISECOND) == cal2.get(Calendar.MILLISECOND) &&
                cal1.get(Calendar.SECOND) == cal2.get(Calendar.SECOND) &&
                cal1.get(Calendar.MINUTE) == cal2.get(Calendar.MINUTE) &&
                cal1.get(Calendar.HOUR_OF_DAY) == cal2.get(Calendar.HOUR_OF_DAY) &&
                cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) &&
                cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) &&
                cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA) &&
                cal1.getClass() == cal2.getClass();
    }
public static boolean isSameLocalTime ( final Calendar cal1 , final Calendar cal2 ) { if ( cal1 == null || cal2 == null ) { throw new IllegalArgumentException ( "The date must not be null" ) ; } return cal1 . get ( Calendar . MILLISECOND ) == cal2 . get ( Calendar . MILLISECOND ) && cal1 . get ( Calendar . SECOND ) == cal2 . get ( Calendar . SECOND ) && cal1 . get ( Calendar . MINUTE ) == cal2 . get ( Calendar . MINUTE ) && cal1 . get ( Calendar . HOUR_OF_DAY ) == cal2 . get ( Calendar . HOUR_OF_DAY ) && cal1 . get ( Calendar . DAY_OF_YEAR ) == cal2 . get ( Calendar . DAY_OF_YEAR ) && cal1 . get ( Calendar . YEAR ) == cal2 . get ( Calendar . YEAR ) && cal1 . get ( Calendar . ERA ) == cal2 . get ( Calendar . ERA ) && cal1 . getClass ( ) == cal2 . getClass ( ) ; }
<p>Checks if two calendar objects represent the same local time.</p>

<p>This method compares the values of the fields of the two objects.
In addition, both calendars must be the same of the same type.</p>

@param cal1  the first calendar, not altered, not null
@param cal2  the second calendar, not altered, not null
@return true if they represent the same millisecond instant
@throws IllegalArgumentException if either date is <code>null</code>
@since 2.1