int[] gjFromFixed(long date) {
        int year = gjYearFromFixed(date);
        long priorDays = date - fixedFromGJ(year, 1, 1);
        long correction;
        if (date < fixedFromGJ(year, 3, 1)) {
            correction = 0;
        } else if (isLeapYear(year)) {
            correction = 1;
        } else {
            correction = 2;
        }
        int monthOfYear = (int)div(12 * (priorDays + correction) + 373, 367);
        int day = (int)(date - fixedFromGJ(year, monthOfYear, 1) + 1);

        return new int[]{year, monthOfYear, day};
    }