blob: 8971c57fdd03b5a2f9a0eff805459cf3e47967b8 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2008, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.impl.javaspi.text;
import java.text.DateFormat;
import java.text.spi.DateFormatProvider;
import java.util.Locale;
import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
import com.ibm.icu.impl.jdkadapter.SimpleDateFormatICU;
public class DateFormatProviderICU extends DateFormatProvider {
private static final int NONE = -1;
@Override
public DateFormat getDateInstance(int style, Locale locale) {
return getInstance(style, NONE, locale);
}
@Override
public DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) {
return getInstance(dateStyle, timeStyle, locale);
}
@Override
public DateFormat getTimeInstance(int style, Locale locale) {
return getInstance(NONE, style, locale);
}
@Override
public Locale[] getAvailableLocales() {
return ICULocaleServiceProvider.getAvailableLocales();
}
private DateFormat getInstance(int dstyle, int tstyle, Locale locale) {
com.ibm.icu.text.DateFormat icuDfmt;
Locale actual = ICULocaleServiceProvider.canonicalize(locale);
if (dstyle == NONE) {
icuDfmt = com.ibm.icu.text.DateFormat.getTimeInstance(tstyle, actual);
} else if (tstyle == NONE) {
icuDfmt = com.ibm.icu.text.DateFormat.getDateInstance(dstyle, actual);
} else {
icuDfmt = com.ibm.icu.text.DateFormat.getDateTimeInstance(dstyle, tstyle, actual);
}
if (!(icuDfmt instanceof com.ibm.icu.text.SimpleDateFormat)) {
// icuDfmt must be always SimpleDateFormat
return null;
}
com.ibm.icu.text.DecimalFormatSymbols decfs = ICULocaleServiceProvider.getDecimalFormatSymbolsForLocale(actual);
if (decfs != null) {
com.ibm.icu.text.NumberFormat icuNfmt = icuDfmt.getNumberFormat();
if (icuNfmt instanceof com.ibm.icu.text.DecimalFormat) {
((com.ibm.icu.text.DecimalFormat)icuNfmt).setDecimalFormatSymbols(decfs);
} else if (icuNfmt instanceof com.ibm.icu.impl.DateNumberFormat) {
((com.ibm.icu.impl.DateNumberFormat)icuNfmt).setZeroDigit(decfs.getDigit());
}
icuDfmt.setNumberFormat(icuNfmt);
}
return SimpleDateFormatICU.wrap((com.ibm.icu.text.SimpleDateFormat)icuDfmt);
}
}