/** * Returns day-of-year. * * @param cycleNumber a cycle number * @param dayOfCycle day of cycle * @param yearInCycle year in cycle * @return day-of-year */ private static int getDayOfYear(int cycleNumber, int dayOfCycle, int yearInCycle) { Integer[] cycles = getAdjustedCycle(cycleNumber); if (dayOfCycle > 0) { return dayOfCycle - cycles[yearInCycle].intValue(); } else { return cycles[yearInCycle].intValue() + dayOfCycle; } }
/** * Returns the year in cycle from the cycle number and day of cycle. * * @param cycleNumber a cycle number * @param dayOfCycle day of cycle * @return a year in cycle */ private static int getYearInCycle(int cycleNumber, long dayOfCycle) { Integer[] cycles = getAdjustedCycle(cycleNumber); if (dayOfCycle == 0) { return 0; } if (dayOfCycle > 0) { for (int i = 0; i < cycles.length; i++) { if (dayOfCycle < cycles[i].intValue()) { return i - 1; } } return 29; } else { dayOfCycle = -dayOfCycle; for (int i = 0; i < cycles.length; i++) { if (dayOfCycle <= cycles[i].intValue()) { return i - 1; } } return 29; } }
/** * Returns the Gregorian epoch day from the proleptic year * @param prolepticYear the proleptic year * @return the Epoch day */ private static long yearToGregorianEpochDay(int prolepticYear) { int cycleNumber = (prolepticYear - 1) / 30; // 0-based. int yearInCycle = (prolepticYear - 1) % 30; // 0-based. int dayInCycle = getAdjustedCycle(cycleNumber)[Math.abs(yearInCycle)] .intValue(); if (yearInCycle < 0) { dayInCycle = -dayInCycle; } Long cycleDays; try { cycleDays = ADJUSTED_CYCLES[cycleNumber]; } catch (ArrayIndexOutOfBoundsException e) { cycleDays = null; } if (cycleDays == null) { cycleDays = new Long(cycleNumber * 10631); } return (cycleDays.longValue() + dayInCycle + HIJRAH_JAN_1_1_GREGORIAN_DAY - 1); }