code: @Override
      public final D transform(long utcDays) {
  
          long s1 = this.winterOnOrBefore(utcDays);
          long s2 = this.winterOnOrBefore(s1 + 370);
          long m12 = this.newMoonOnOrAfter(s1 + 1);
          long nextM11 = this.newMoonBefore(s2 + 1);
          long m = this.newMoonBefore(utcDays + 1);
          boolean leapYearInSui = (lunations(m12, nextM11) == 12);
  
          long me = lunations(m12, m); // might be negative
  
          if (leapYearInSui && this.hasLeapMonth(m12, m)) {
              me--;
          }
  
          int month = (int) Math.floorMod(me, 12);
  
          if (month == 0) {
              month = 12;
          }
  
          long elapsedYears =
              (long) Math.floor(1.5 - (month / 12.0) + ((utcDays - EPOCH_CHINESE) / MEAN_TROPICAL_YEAR));
  
          int cycle = (int) Math.floorDiv(elapsedYears - 1, 60) + 1;
          int yearOfCycle = (int) Math.floorMod(elapsedYears, 60);
  
          if (yearOfCycle == 0) {
              yearOfCycle = 60;
          }
  
          int dayOfMonth = (int) (utcDays - m + 1);
          EastAsianMonth eam = EastAsianMonth.valueOf(month);
  
          if (leapYearInSui && this.hasNoMajorSolarTerm(m) && !this.hasLeapMonth(m12, this.newMoonBefore(m))) {
              eam = eam.withLeap();
          }
  
          return this.create(cycle, yearOfCycle, eam, dayOfMonth, utcDays);
  
      }
docs: ~ Methoden ----------------------------------------------------------