code: static ZoneRegion ofId(String zoneId, boolean checkAvailable) {
          Jdk8Methods.requireNonNull(zoneId, "zoneId");
          if (zoneId.length() < 2 || PATTERN.matcher(zoneId).matches() == false) {
              throw new DateTimeException("Invalid ID for region-based ZoneId, invalid format: " + zoneId);
          }
          ZoneRules rules = null;
          try {
              // always attempt load for better behavior after deserialization
              rules = ZoneRulesProvider.getRules(zoneId, true);
          } catch (ZoneRulesException ex) {
              // special case as removed from data file
              if (zoneId.equals("GMT0")) {
                  rules = ZoneOffset.UTC.getRules();
              } else if (checkAvailable) {
                  throw ex;
              }
          }
          return new ZoneRegion(zoneId, rules);
      }
docs: Obtains an instance of {@code ZoneId} from an identifier.
  
  @param zoneId  the time-zone ID, not null
  @param checkAvailable  whether to check if the zone ID is available
  @return the zone ID, not null
  @throws DateTimeException if the ID format is invalid
  @throws DateTimeException if checking availability and the ID cannot be found