int month = (dayOfYear * 5 + 3) / (31 + 30 + 31 + 30 + 31); int day = (6 + (dayOfYear * 5 + 3) % (31 + 30 + 31 + 30 + 31)) / 5;
int month = isSet[MONTH] ? fields[MONTH] : (dayOfYear * 5 + 3) / (31 + 30 + 31 + 30 + 31);   int day = isSet[DAY_OF_MONTH] ? fields[DAY_OF_MONTH] : (6 + (dayOfYear * 5 + 3) % (31 + 30 + 31 + 30 + 31)) / 5;
	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;	}