docs: static Generator serialHourGenerator(
              final int interval, final DateValue dtStart) {
  
          return new Generator() {
              int hour = ((dtStart instanceof TimeValue)
                      ? ((TimeValue) dtStart).hour() : 0) - interval;
              int day = dtStart.day();
              int month = dtStart.month();
              int year = dtStart.year();
  
              @Override
              boolean generate(DTBuilder builder) {
                  int nhour;
                  if (day != builder.day || month != builder.month
                          || year != builder.year) {
                      int hoursBetween = daysBetween(
                              builder, year, month, day) * 24 - hour;
                      nhour = ((interval - (hoursBetween % interval)) % interval);
                      if (nhour > 23) {
                          // Don't update day so that the difference calculation above is
                          // correct when this function is reentered with a different day
                          return false;
                      }
                      day = builder.day;
                      month = builder.month;
                      year = builder.year;
                  } else {
                      nhour = hour + interval;
                      if (nhour > 23) {
                          return false;
                      }
                  }
                  hour = builder.hour = nhour;
                  return true;
              }
  
              @Override
              public String toString() {
                  return "serialHourGenerator:" + interval;
              }
          };
      }