2 *******************************************************************************
\r
3 * Copyright (C) 2008, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.impl.javaspi.text;
\r
9 import java.text.DateFormat;
\r
10 import java.text.spi.DateFormatProvider;
\r
11 import java.util.Locale;
\r
13 import com.ibm.icu.impl.javaspi.ICULocaleServiceProvider;
\r
14 import com.ibm.icu.impl.jdkadapter.SimpleDateFormatICU;
\r
16 public class DateFormatProviderICU extends DateFormatProvider {
\r
18 private static final int NONE = -1;
\r
21 public DateFormat getDateInstance(int style, Locale locale) {
\r
22 return getInstance(style, NONE, locale);
\r
26 public DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) {
\r
27 return getInstance(dateStyle, timeStyle, locale);
\r
31 public DateFormat getTimeInstance(int style, Locale locale) {
\r
32 return getInstance(NONE, style, locale);
\r
36 public Locale[] getAvailableLocales() {
\r
37 return ICULocaleServiceProvider.getAvailableLocales();
\r
40 private DateFormat getInstance(int dstyle, int tstyle, Locale locale) {
\r
41 com.ibm.icu.text.DateFormat icuDfmt;
\r
42 Locale actual = ICULocaleServiceProvider.canonicalize(locale);
\r
43 if (dstyle == NONE) {
\r
44 icuDfmt = com.ibm.icu.text.DateFormat.getTimeInstance(tstyle, actual);
\r
45 } else if (tstyle == NONE) {
\r
46 icuDfmt = com.ibm.icu.text.DateFormat.getDateInstance(dstyle, actual);
\r
48 icuDfmt = com.ibm.icu.text.DateFormat.getDateTimeInstance(dstyle, tstyle, actual);
\r
50 if (!(icuDfmt instanceof com.ibm.icu.text.SimpleDateFormat)) {
\r
51 // icuDfmt must be always SimpleDateFormat
\r
55 com.ibm.icu.text.DecimalFormatSymbols decfs = ICULocaleServiceProvider.getDecimalFormatSymbolsForLocale(actual);
\r
56 if (decfs != null) {
\r
57 com.ibm.icu.text.NumberFormat icuNfmt = icuDfmt.getNumberFormat();
\r
58 if (icuNfmt instanceof com.ibm.icu.text.DecimalFormat) {
\r
59 ((com.ibm.icu.text.DecimalFormat)icuNfmt).setDecimalFormatSymbols(decfs);
\r
60 } else if (icuNfmt instanceof com.ibm.icu.impl.DateNumberFormat) {
\r
61 ((com.ibm.icu.impl.DateNumberFormat)icuNfmt).setZeroDigit(decfs.getDigit());
\r
63 icuDfmt.setNumberFormat(icuNfmt);
\r
66 return SimpleDateFormatICU.wrap((com.ibm.icu.text.SimpleDateFormat)icuDfmt);
\r