code: private static String parseZoneID(String text, ParsePosition pos) {
          String resolvedID = null;
          if (ZONE_ID_TRIE == null) {
              synchronized (TimeZoneFormat.class) {
                  if (ZONE_ID_TRIE == null) {
                      // Build zone ID trie
                      TextTrieMap<String> trie = new TextTrieMap<String>(true);
                      String[] ids = TimeZone.getAvailableIDs();
                      for (String id : ids) {
                          trie.put(id, id);
                      }
                      ZONE_ID_TRIE = trie;
                  }
              }
          }
  
          int[] matchLen = new int[] {0};
          Iterator<String> itr = ZONE_ID_TRIE.get(text, pos.getIndex(), matchLen);
          if (itr != null) {
              resolvedID = itr.next();
              pos.setIndex(pos.getIndex() + matchLen[0]);
          } else {
              // TODO
              // We many need to handle rule based custom zone ID (See ZoneMeta.parseCustomID),
              // such as GM+05:00. However, the public parse method in this class also calls
              // parseOffsetLocalizedGMT and custom zone IDs are likely supported by the parser,
              // so we might not need to handle them here.
              pos.setErrorIndex(pos.getIndex());
          }
          return resolvedID;
      }
docs: Parse a zone ID.
  @param text the text contains a time zone ID string at the position.
  @param pos the position.
  @return The zone ID parsed.