Internationalization Java Tutorial

SPI stands for service provider interface.
You can write your own implementations for most locale sensitive classes in the java.text and java.util packages for locales that are not (yet) supported by the JRE.
with the new Java 6 feature, you can provide locale-sensitive implementations for the following entities.
Language and country names for the java.util.Locale class
Time zone names for the java.util.TimeZone class
Symbols for the java.util.Currency class

java.text.BreakIterator
java.text.Collator
java.text.DateFormat
java.text.NumberFormat
java.text.DateFormatSymbols
java.text.DecimalFormatSymbol
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.spi.DateFormatProvider;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class AntarcticaLocaleDemo {
    public static void main(String [] args) {
        Date now = new Date();
        DateFormat defaultFormat = DateFormat.getDateTimeInstance();
        String defaultString = defaultFormat.format (now);
        System.out.println ("Default : " + defaultString);
        DateFormat antarcticaFormat =
                DateFormat.getDateTimeInstance (
                DateFormat.FULL, DateFormat.FULL,
                new Locale ("en", "AQ"));
        String antarcticaString = antarcticaFormat.format (now);
        System.out.println ("Antarctica: " + antarcticaString);
    }
}
class DateFormatProviderImpl extends DateFormatProvider {
    private Locale antarctica = new Locale ("en", "AQ");
    public Locale[] getAvailableLocales() {
        return new Locale [] {antarctica};
    }
    public DateFormat getTimeInstance(int style, Locale locale) {
        if (locale.equals(antarctica)) {
            return new SimpleDateFormat("HH.mm.ss");
        }
        return null;
    }
    public DateFormat getDateTimeInstance(int dateStyle, Locale locale) {
        if (locale.equals(antarctica)) {
            return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");
        }
        return null;
    }
    public DateFormat getDateTimeInstance(int dateStyle,
           int timeStyle, Locale locale) {
        if (locale.equals(antarctica)) {
            return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");
        }
        return null;
    }
    @Override
    public DateFormat getDateInstance(int style, Locale locale) {
      if (locale.equals(antarctica)) {
        return new SimpleDateFormat("yyyy~MM~dd HH.mm.ss");
      }
      return null;
    }
}
//Reference:
//Java 6 New Features: A Tutorial
//by Budi Kurniawan 
//Brainy Software Corp. 2006
//Chapter 4 - Networking
//# ISBN-10: 0975212885
//# ISBN-13: 978-0975212882