code: 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();
      }
docs: <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