code: private long monthStart(int year, int month) {
          // Normalize year/month in case month is outside the normal bounds, which may occur
          // in the case of an add operation
          int realYear = year + month / 12;
          int realMonth = month % 12;
          long ms = 0;
          if (cType == CalculationType.ISLAMIC_CIVIL
                  || cType == CalculationType.ISLAMIC_TBLA
                  || (cType == CalculationType.ISLAMIC_UMALQURA && year < UMALQURA_YEAR_START )) {
              ms = (long)Math.ceil(29.5*realMonth)
                      + (realYear-1)*354 + (long)Math.floor((3+11*realYear)/30.0);
          } else if(cType == CalculationType.ISLAMIC) {
              ms = trueMonthStart(12*(realYear-1) + realMonth);
          } else if(cType == CalculationType.ISLAMIC_UMALQURA) {
              ms = yearStart(year);
              for(int i=0; i< month; i++) {
                  ms+= handleGetMonthLength(year, i);
              }
          }
  
          return ms;
      }
docs: Return the day # on which the given month starts.  Days are counted
  from the Hijri epoch, origin 0.
  
  @param year  The hijri year
  @param month  The hijri month, 0-based