Program: 64944
Project: 64944
Buggy source:
/** 
 * Zeroes out all units for this datetime instance below a specified unit.
 * @param iUnit The unit below which all values are to be zeroed out
 * @param always indicates if it's always trimmed no matter if it's full date time
 */
public final void clearBelow(int iUnit,boolean always){
  if (!always && isFullDateTime()) {
    return;
  }
  if (iUnit == YEAR) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.DATE,1);
    set(Calendar.AM_PM,AM);
    set(Calendar.MONTH,0);
  }
 else   if (iUnit == MONTH || iUnit == GroupingUnitType.QUARTERS) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
    set(Calendar.DATE,1);
    if (iUnit == GroupingUnitType.QUARTERS) {
      set(Calendar.MONTH,(getMonth() / 3) * 3);
    }
  }
 else   if (iUnit == WEEK_OF_YEAR) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
    int weekDay=get(DAY_OF_WEEK);
    add(DATE,1 - weekDay);
  }
 else   if (iUnit == DATE) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
  }
 else   if (iUnit == HOUR || iUnit == HOUR_OF_DAY) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
  }
 else   if (iUnit == MINUTE) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
  }
 else   if (iUnit == SECOND) {
    set(Calendar.MILLISECOND,0);
  }
}

Fixed version (ground truth):
/** 
 * Zeroes out all units for this datetime instance below a specified unit.
 * @param iUnit The unit below which all values are to be zeroed out
 * @param always indicates if it's always trimmed no matter if it's full date time
 */
public final void clearBelow(int iUnit,boolean always){
  if (!always && isFullDateTime()) {
    return;
  }
  if (iUnit == YEAR) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.DATE,1);
    set(Calendar.AM_PM,AM);
    set(Calendar.MONTH,0);
  }
 else   if (iUnit == MONTH || iUnit == QUARTER) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
    set(Calendar.DATE,1);
    if (iUnit == QUARTER) {
      set(Calendar.MONTH,(getMonth() / 3) * 3);
    }
  }
 else   if (iUnit == WEEK_OF_YEAR || iUnit == WEEK_OF_MONTH) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
    int weekDay=get(DAY_OF_WEEK);
    add(DATE,1 - weekDay);
  }
 else   if (iUnit == DATE || iUnit == DAY_OF_MONTH || iUnit == DAY_OF_WEEK || iUnit == DAY_OF_YEAR) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
    set(Calendar.HOUR,0);
    set(Calendar.AM_PM,AM);
  }
 else   if (iUnit == HOUR || iUnit == HOUR_OF_DAY) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
    set(Calendar.MINUTE,0);
  }
 else   if (iUnit == MINUTE) {
    set(Calendar.MILLISECOND,0);
    set(Calendar.SECOND,0);
  }
 else   if (iUnit == SECOND) {
    set(Calendar.MILLISECOND,0);
  }
}