code: protected TimeZone guessTimeZone() {
          // TODO fix using real data
          // for single-zone countries, pick that zone
          // for others, pick the most populous zone
          // for now, just use fixed value
          // NOTE: in a few cases can do better by looking at language.
          // Eg haw+US should go to Pacific/Honolulu
          // fr+CA should go to America/Montreal
          String timezoneString = territory_tzid_hack_map.get(getTerritory());
          if (timezoneString == null) {
              String[] attempt = TimeZone.getAvailableIDs(getTerritory());
              if (attempt.length == 0) {
                  timezoneString = "Etc/GMT"; // gotta do something
              } else {
                  int i;
                  // this all needs to be fixed to use real data. But for now, do slightly better by skipping cruft
                  for (i = 0; i < attempt.length; ++i) {
                      if (attempt[i].indexOf("/") >= 0) break;
                  }
                  if (i > attempt.length) i = 0;
                  timezoneString = attempt[i];
              }
          }
          return TimeZone.getTimeZone(timezoneString);
      }
docs: This function can be overridden by subclasses to use different heuristics.
  <b>It MUST return a 'safe' value,
  one whose modification will not affect this object.</b>
  
  @hide draft / provisional / internal are hidden on Android