code: public DateFormat getDateFormat(int dateStyle, int timeStyle) {
          if (dateStyle == DF_NONE && timeStyle == DF_NONE
                  || dateStyle < 0 || dateStyle >= DF_LIMIT
                  || timeStyle < 0 || timeStyle >= DF_LIMIT) {
              throw new IllegalArgumentException("Illegal date format style arguments");
          }
          DateFormat result = null;
          if (dateFormats != null) {
              result = dateFormats[dateStyle][timeStyle];
          }
          if (result != null) {
              result = (DateFormat) result.clone(); // clone for safety
              // Not sure overriding configuration is what we really want...
              result.setTimeZone(getTimeZone());
          } else {
              result = guessDateFormat(dateStyle, timeStyle);
          }
          return result;
      }
docs: Gets a date format according to the current settings. If there
  is an explicit (non-null) date/time format set, a copy of that
  is returned. Otherwise, the language priority list is used.
  DF_NONE should be used for the style, where only the date or
  time format individually is being gotten.
  
  @param dateStyle DF_FULL, DF_LONG, DF_MEDIUM, DF_SHORT or DF_NONE
  @param timeStyle DF_FULL, DF_LONG, DF_MEDIUM, DF_SHORT or DF_NONE
  @return a DateFormat, according to the above description
  @hide draft / provisional / internal are hidden on Android