code: public Map<LocaleID, ClassName> generate(Path outputDir, DataReader reader)
        throws IOException {
  
      Map<LocaleID, ClassName> dateClasses = new TreeMap<>();
      List<DateTimeData> dateTimeDataList = new ArrayList<>();
  
      for (Map.Entry<LocaleID, DateTimeData> entry : reader.calendars().entrySet()) {
        DateTimeData dateTimeData = entry.getValue();
  
        LocaleID localeId = entry.getKey();
        String className = "_CalendarFormatter_" + localeId.safe;
  
        TimeZoneData timeZoneData = reader.timezones().get(localeId);
        
        TypeSpec type = createFormatter(dateTimeData, timeZoneData, className);
        CodeGenerator.saveClass(outputDir, Types.PACKAGE_CLDR_DATES, className, type);
  
        ClassName cls = ClassName.get(Types.PACKAGE_CLDR_DATES, className);
        dateClasses.put(localeId, cls);
        dateTimeDataList.add(dateTimeData);
      }
  
      String className = "_CalendarUtils";
      TypeSpec.Builder utilsType = TypeSpec.classBuilder(className)
          .addModifiers(PUBLIC);
      
      addSkeletonClassifierMethod(utilsType, dateTimeDataList);
      addMetaZones(utilsType, reader.metazones());
      buildTimeZoneAliases(utilsType, reader.timezoneAliases());
  
      CodeGenerator.saveClass(outputDir, Types.PACKAGE_CLDR_DATES, "_CalendarUtils", utilsType.build());
  
      return dateClasses;
    }
docs: Generates the date-time classes into the given output directory.