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