protected void absoluteToHijri(int date){
		if(date < HIJRI_EPOCH) //pre-Islamic date
			return;
		int Mc = (date-HIJRI_EPOCH+1)*CONTS_Q/(29*CONTS_Q+CONTS_P);
		int mYEAR = Mc/12+1;
		int mMONTH = (Mc%12)+1;
		// consistency check
		int d = hijriToAbsolute(mYEAR,mMONTH,1); //TODO: this is an expensive call
		if (date < d){ // go one month back if needed
				mMONTH-=1;
			if (mMONTH==0){
				mYEAR-=1;
				mMONTH=DHU_AL_HIJJAH;
			}
			int monthDays = getHijriMonthDays(mYEAR,mMONTH);
			d-=monthDays; // this call is fast
		}
		//
		int mDAY = 1 + date - d;
		fields[ERA] = AH;
		fields[YEAR] = mYEAR;
		fields[MONTH] = mMONTH;
		fields[DAY_OF_MONTH] = mDAY;
		computeFields();
	}