/* GENERATED SOURCE. DO NOT MODIFY. */
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*********************************************************************
* Copyright (C) 2000-2014, International Business Machines Corporation and
* others. All Rights Reserved.
*********************************************************************
*/
package android.icu.text;
import java.io.InvalidObjectException;
import java.text.FieldPosition;
import java.util.Locale;
import android.icu.util.Calendar;
import android.icu.util.ChineseCalendar;
import android.icu.util.TimeZone;
import android.icu.util.ULocale;
/**
* A concrete {@link DateFormat} for {@link android.icu.util.ChineseCalendar}.
* This class handles a ChineseCalendar
-specific field,
* ChineseCalendar.IS_LEAP_MONTH
. It also redefines the
* handling of two fields, ERA
and YEAR
. The
* former is displayed numerically, instead of symbolically, since it is
* the numeric cycle number in ChineseCalendar
. The latter is
* numeric, as before, but has no special 2-digit Y2K behavior.
*
*
With regard to ChineseCalendar.IS_LEAP_MONTH
, this
* class handles parsing specially. If no string symbol is found at all,
* this is taken as equivalent to an IS_LEAP_MONTH
value of
* zero. This allows formats to display a special string (e.g., "*") for
* leap months, but no string for normal months.
*
*
Summary of field changes vs. {@link SimpleDateFormat}:
* Symbol Meaning Presentation Example * ------ ------- ------------ ------- * G cycle (Number) 78 * y year of cycle (1..60) (Number) 17 * l is leap month (Text) 4637 ** * @see android.icu.util.ChineseCalendar * @see ChineseDateFormatSymbols * @author Alan Liu * @deprecated ICU 50 Use SimpleDateFormat instead. * @hide Only a subset of ICU is exposed in Android */ @Deprecated public class ChineseDateFormat extends SimpleDateFormat { // Generated by serialver from JDK 1.4.1_01 static final long serialVersionUID = -4610300753104099899L; // TODO Finish the constructors /** * Construct a ChineseDateFormat from a date format pattern and locale * @param pattern the pattern * @param locale the locale * @deprecated ICU 50 */ @Deprecated public ChineseDateFormat(String pattern, Locale locale) { this(pattern, ULocale.forLocale(locale)); } /** * Construct a ChineseDateFormat from a date format pattern and locale * @param pattern the pattern * @param locale the locale * @deprecated ICU 50 */ @Deprecated public ChineseDateFormat(String pattern, ULocale locale) { this(pattern, null, locale); } /** * Construct a ChineseDateFormat from a date format pattern, numbering system override and locale * @param pattern the pattern * @param override The override string. A numbering system override string can take one of the following forms: * 1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern. * 2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern * followed by an = sign, followed by the numbering system name. For example, to specify that just the year * be formatted using Hebrew digits, use the override "y=hebr". Multiple overrides can be specified in a single * string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using * Thai digits for the month and Devanagari digits for the year. * @param locale the locale * @deprecated ICU 50 */ @Deprecated public ChineseDateFormat(String pattern, String override, ULocale locale) { super(pattern, new ChineseDateFormatSymbols(locale), new ChineseCalendar(TimeZone.getDefault(), locale), locale, true, override); } // NOTE: This API still exists; we just inherit it from SimpleDateFormat // as of ICU 3.0 // /** // * @stable ICU 2.0 // */ // protected String subFormat(char ch, int count, int beginOffset, // FieldPosition pos, DateFormatSymbols formatData, // Calendar cal) { // switch (ch) { // case 'G': // 'G' - ERA // return zeroPaddingNumber(cal.get(Calendar.ERA), 1, 9); // case 'l': // 'l' - IS_LEAP_MONTH // { // ChineseDateFormatSymbols symbols = // (ChineseDateFormatSymbols) formatData; // return symbols.getLeapMonth(cal.get( // ChineseCalendar.IS_LEAP_MONTH)); // } // default: // return super.subFormat(ch, count, beginOffset, pos, formatData, cal); // } // } /** * {@inheritDoc} * @deprecated This API is ICU internal only. * @hide draft / provisional / internal are hidden on Android */ @Override @Deprecated protected void subFormat(StringBuffer buf, char ch, int count, int beginOffset, int fieldNum, DisplayContext capitalizationContext, FieldPosition pos, char patternCharToOutput, Calendar cal) { // Logic to handle 'G' for chinese calendar is moved into SimpleDateFormat, // and obsolete pattern char 'l' is now ignored in SimpleDateFormat, so we // just use its implementation super.subFormat(buf, ch, count, beginOffset, fieldNum, capitalizationContext, pos, patternCharToOutput, cal); // The following is no longer an issue for this subclass... // TODO: add code to set FieldPosition for 'G' and 'l' fields. This // is a DESIGN FLAW -- subclasses shouldn't have to duplicate the // code that handles this at the end of SimpleDateFormat.subFormat. // The logic should be moved up into SimpleDateFormat.format. } /** * {@inheritDoc} * * @deprecated ICU 50 */ @Deprecated @Override protected int subParse(String text, int start, char ch, int count, boolean obeyCount, boolean allowNegative, boolean[] ambiguousYear, Calendar cal) { // Logic to handle numeric 'G' eras for chinese calendar, and to skip special 2-digit year // handling for chinese calendar, is moved into SimpleDateFormat, so delete here. // Obsolete pattern char 'l' is now ignored for parsing in SimpleDateFormat, no handling // needed here. // So just use SimpleDateFormat implementation for this. // just use its implementation return super.subParse(text, start, ch, count, obeyCount, allowNegative, ambiguousYear, cal); } /** * {@inheritDoc} * * @deprecated ICU 50 */ @Override @Deprecated protected DateFormat.Field patternCharToDateFormatField(char ch) { // no longer any field corresponding to pattern char 'l' return super.patternCharToDateFormatField(ch); } /** * The instances of this inner class are used as attribute keys and values * in AttributedCharacterIterator that * ChineseDateFormat.formatToCharacterIterator() method returns. *
* There is no public constructor to this class, the only instances are the * constants defined here. *
* @deprecated ICU 50
* @hide Only a subset of ICU is exposed in Android
*/
@Deprecated
public static class Field extends DateFormat.Field {
private static final long serialVersionUID = -5102130532751400330L;
/**
* Constant identifying the leap month marker.
* @deprecated ICU 50 This field is only used by the deprecated ChineseDateFormat class.
*/
@Deprecated
public static final Field IS_LEAP_MONTH = new Field("is leap month", ChineseCalendar.IS_LEAP_MONTH);
/**
* Constructs a ChineseDateFormat.Field
with the given name and
* the ChineseCalendar
field which this attribute represents.
* Use -1 for calendarField
if this field does not have a
* corresponding ChineseCalendar
field.
*
* @param name Name of the attribute
* @param calendarField Calendar
field constant
*
* @deprecated ICU 50
*/
@Deprecated
protected Field(String name, int calendarField) {
super(name, calendarField);
}
/**
* Returns the Field
constant that corresponds to the
* ChineseCalendar
field calendarField
. If there is no
* corresponding Field
is available, null is returned.
*
* @param calendarField ChineseCalendar
field constant
* @return Field
associated with the calendarField
,
* or null if no associated Field
is available.
* @throws IllegalArgumentException if calendarField
is not
* a valid Calendar
field constant.
*
* @deprecated ICU 50
*/
@Deprecated
public static DateFormat.Field ofCalendarField(int calendarField) {
// Should we remove the following, since there is no longer a specific
// date format field for leap month (since 'l' pattern char is obsolete)?
if (calendarField == ChineseCalendar.IS_LEAP_MONTH) {
return IS_LEAP_MONTH;
}
return DateFormat.Field.ofCalendarField(calendarField);
}
/**
* {@inheritDoc}
*
* @deprecated ICU 50
*/
@Override
@Deprecated
///CLOVER:OFF
protected Object readResolve() throws InvalidObjectException {
if (this.getClass() != ChineseDateFormat.Field.class) {
throw new InvalidObjectException("A subclass of ChineseDateFormat.Field must implement readResolve.");
}
if (this.getName().equals(IS_LEAP_MONTH.getName())) {
return IS_LEAP_MONTH;
} else {
throw new InvalidObjectException("Unknown attribute name.");
}
}
///CLOVER:ON
}
}