hour += 12;
if (hour != 12)  hour += 12;  if (isSet[AM_PM] && fields[AM_PM] == AM && hour == 12) hour = 0;
  protected synchronized void computeTime()  {    int era = isSet[ERA] ? fields[ERA] : AD;    int year = isSet[YEAR] ? fields[YEAR] : 1970;    if (era == BC)      year = 1 - year;    int[] daysOfYear = getDayOfYear(year);    int hour = 0;    if (isSet[HOUR_OF_DAY])      hour = fields[HOUR_OF_DAY];    else if (isSet[HOUR])      {	hour = fields[HOUR];        if (isSet[AM_PM] && fields[AM_PM] == PM)	  hour += 12;      }    int minute = isSet[MINUTE] ? fields[MINUTE] : 0;    int second = isSet[SECOND] ? fields[SECOND] : 0;    int millis = isSet[MILLISECOND] ? fields[MILLISECOND] : 0;    int millisInDay;    if (isLenient())      {	// prevent overflow	long allMillis = (((hour * 60L) + minute) * 60L + second) * 1000L	  + millis;	daysOfYear[1] += allMillis / (24 * 60 * 60 * 1000L);	millisInDay = (int) (allMillis % (24 * 60 * 60 * 1000L));      }    else      {	if (hour < 0 || hour >= 24 || minute < 0 || minute > 59	    || second < 0 || second > 59 || millis < 0 || millis >= 1000)	  throw new IllegalArgumentException();	millisInDay = (((hour * 60) + minute) * 60 + second) * 1000 + millis;      }    time = getLinearTime(year, daysOfYear[0], millisInDay);    // Add the relative days after calculating the linear time, to    // get right behaviour when jumping over the gregorianCutover.    time += daysOfYear[1] * (24 * 60 * 60 * 1000L);    TimeZone zone = getTimeZone();    int rawOffset = isSet[ZONE_OFFSET]      ? fields[ZONE_OFFSET] : zone.getRawOffset();    int dayOfYear = daysOfYear[0] + daysOfYear[1];    int month = (dayOfYear * 5 + 3) / (31 + 30 + 31 + 30 + 31);    int day = (6 + (dayOfYear * 5 + 3) % (31 + 30 + 31 + 30 + 31)) / 5;    int weekday = ((int) (time / (24 * 60 * 60 * 1000L)) + THURSDAY) % 7;    if (weekday <= 0)      weekday += 7;    int dstOffset = isSet[DST_OFFSET]      ? fields[DST_OFFSET] : (zone.getOffset((year < 0) ? BC : AD,					     (year < 0) ? 1 - year : year,					     month, day, weekday, millisInDay)			      - zone.getRawOffset());    time -= rawOffset + dstOffset;    isTimeSet = true;  }