code: protected void handleComputeFields(int julianDay) {
          long d = julianDay - 347997;
          long m = (d * DAY_PARTS) / MONTH_PARTS;         // Months (approx)
          int year = (int)((19 * m + 234) / 235) + 1;     // Years (approx)
          long ys  = startOfYear(year);                   // 1st day of year
          int dayOfYear = (int)(d - ys);
  
          // Because of the postponement rules, it's possible to guess wrong.  Fix it.
          while (dayOfYear < 1) {
              year--;
              ys  = startOfYear(year);
              dayOfYear = (int)(d - ys);
          }
  
          // Now figure out which month we're in, and the date within that month
          int yearType = yearType(year);
          int monthStart[][] = isLeapYear(year) ? LEAP_MONTH_START : MONTH_START;
  
          int month = 0;
          while (dayOfYear > monthStart[month][yearType]) {
              month++;
          }
          month--;
          int dayOfMonth = dayOfYear - monthStart[month][yearType];
  
          internalSet(ERA, 0);
          internalSet(YEAR, year);
          internalSet(EXTENDED_YEAR, year);
          internalSet(MONTH, month);
          internalSet(DAY_OF_MONTH, dayOfMonth);
          internalSet(DAY_OF_YEAR, dayOfYear);       
      }
docs: Subclasses may override this method to compute several fields
  specific to each calendar system.  These are:
  
  <ul><li>ERA
  <li>YEAR
  <li>MONTH
  <li>DAY_OF_MONTH
  <li>DAY_OF_YEAR
  <li>EXTENDED_YEAR</ul>
  
  Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields,
  which will be set when this method is called.  Subclasses can
  also call the getGregorianXxx() methods to obtain Gregorian
  calendar equivalents for the given Julian day.
  
  <p>In addition, subclasses should compute any subclass-specific
  fields, that is, fields from BASE_FIELD_COUNT to
  getFieldCount() - 1.