title: What are some good ways to customize date/time display format for different localization
body: <p>Whenever I want to print out date/time format to a human readable form, IDE will recommend me to use one of the following way</p>
  
  <pre><code>getDateInstance()
  getDateTimeInstance()
  getTimeInstance()
  </code></pre>
  
  <p>However, most of the time, applying different <code>int style</code> doesn't meet my requirement. End up, I need to define my own.</p>
  
  <pre><code>private static final ThreadLocal&lt;SimpleDateFormat&gt; dateFormatThreadLocal = new ThreadLocal &lt;SimpleDateFormat&gt;() {
      @Override protected SimpleDateFormat initialValue() {
          // January 2
          return new SimpleDateFormat("MMMM d");
      }
  };
  </code></pre>
  
  <p>This create a trouble for me, if I want to support non-English as well. For instance, for Chinese market, I need to use separate format.</p>
  
  <pre><code>private static final ThreadLocal&lt;SimpleDateFormat&gt; dateFormatForChineseThreadLocal = new ThreadLocal &lt;SimpleDateFormat&gt;() {
      @Override protected SimpleDateFormat initialValue() {
          // 1月2日
          return new SimpleDateFormat("MMMMd日");
      }
  };
  </code></pre>
  
  <p>My code will end up with the following</p>
  
  <pre><code>public String dateString() {
      if (chinese user) {
          return dateFormatForChineseThreadLocal.get().format(calendar.getTime());
      }
      return dateFormatThreadLocal.get().format(calendar.getTime());
  }
  </code></pre>
  
  <p>This make maintenance job difficult. I was wondering, is there a better way, to customize date/time display format for different localization?</p>