code: static AccountingDate create(AccountingChronology chronology, int prolepticYear, int month, int dayOfMonth) {
          Objects.requireNonNull(chronology, "A previously setup chronology is required.");
          YEAR.checkValidValue(prolepticYear);
          chronology.range(MONTH_OF_YEAR).checkValidValue(month, MONTH_OF_YEAR);
  
          if (dayOfMonth < 1 || dayOfMonth > lengthOfMonth(chronology, prolepticYear, month)) {
              if (month == chronology.getLeapWeekInMonth() && dayOfMonth < (chronology.getDivision().getWeeksInMonth(month) + 1) * DAYS_IN_WEEK
                      && !chronology.isLeapYear(prolepticYear)) {
                  throw new DateTimeException("Invalid date '" + month + "/" + dayOfMonth + "' as '" + prolepticYear + "' is not a leap year");
              } else {
                  throw new DateTimeException("Invalid date '" + month + "/" + dayOfMonth + "'");
              }
          }
  
          return new AccountingDate(chronology, prolepticYear, month, dayOfMonth);
      }
docs: Creates an {@code AccountingDate} validating the input.
  
  @param chronology  the Accounting chronology to base the date on, not null
  @param prolepticYear  the Accounting proleptic-year
  @return the date in Accounting calendar system, not null
  @throws DateTimeException if the value of any field is out of range,
  or if the day-of-year is invalid for the month-year,
  NullPointerException if an AccountingChronology was not provided