code: private DateTimeData parseCalendar(JsonObject root) throws IOException {
      DateTimeData data = new DateTimeData();
      JsonObject node = resolve(root, "dates", "calendars", "gregorian");
  
      data.eras = parseEras(node);
      data.dayPeriodsFormat = parseDayPeriods(node, "format");
      data.dayPeriodsStandalone = parseDayPeriods(node, "stand-alone");
      data.monthsFormat = parseMonths(node, "format");
      data.monthsStandalone = parseMonths(node, "stand-alone");
      data.weekdaysFormat = parseWeekdays(node, "format");
      data.weekdaysStandalone = parseWeekdays(node, "stand-alone");
      data.quartersFormat = parseQuarters(node, "format");
      data.quartersStandalone = parseQuarters(node, "stand-alone");
      data.dateFormats = parseDateFormats(node);
      data.timeFormats = parseTimeFormats(node);
      data.dateTimeFormats = parseDateTimeFormats(node);
      data.dateTimeSkeletons = parseDateTimeSkeletons(node);
  
      // date time intervals and fallback format
      data.intervalFormats = new HashMap<>();
      node = resolve(node, "dateTimeFormats", "intervalFormats");
      for (String key : objectKeys(node)) {
        if (key.equals("intervalFormatFallback")) {
          data.intervalFallbackFormat = string(node, key);
        } else {
          Map<String, String> format = data.intervalFormats.get(key);
          if (format == null) {
            format = new HashMap<>();
            data.intervalFormats.put(key, format);
          }
          
          JsonObject fieldNode = node.getAsJsonObject(key);
          for (String field : objectKeys(fieldNode)) {
            if (!field.endsWith("-alt-variant")) {
              format.put(field, string(fieldNode, field));
            }
          }
        }
      }
      
      return data;
    }
docs: Parse calendar date-time attributes.