From c25116c2c8d6e3b42818934ff01d662eaf94cb3c Mon Sep 17 00:00:00 2001 From: Yoshito Umaoka Date: Fri, 10 Jan 2014 21:45:57 +0000 Subject: [PATCH] ICU-10615 Updated the fix by adding an intenal API Calendar.haveDefaultCentury() like ICU4C, to exclude Chiense/Japanese/Dangi calendar to skip the default century parsing. X-SVN-Rev: 34868 --- .../src/com/ibm/icu/text/SimpleDateFormat.java | 2 +- .../core/src/com/ibm/icu/util/Calendar.java | 17 ++++++++++++++++- .../src/com/ibm/icu/util/ChineseCalendar.java | 11 ++++++++++- .../src/com/ibm/icu/util/JapaneseCalendar.java | 12 +++++++++++- 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/SimpleDateFormat.java b/icu4j/main/classes/core/src/com/ibm/icu/text/SimpleDateFormat.java index ffff47451a3..72368613e5d 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/SimpleDateFormat.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/SimpleDateFormat.java @@ -2819,7 +2819,7 @@ public class SimpleDateFormat extends DateFormat { /* Skip this for Chinese calendar, moved from ChineseDateFormat */ if ( override != null && (override.compareTo("hebr") == 0 || override.indexOf("y=hebr") >= 0) && value < 1000 ) { value += HEBREW_CAL_CUR_MILLENIUM_START_YEAR; - } else if (count == 2 && (pos.getIndex() - start) == 2 && !isChineseCalendar && !cal.getType().equals("japanese") + } else if (count == 2 && (pos.getIndex() - start) == 2 && cal.haveDefaultCentury() && UCharacter.isDigit(text.charAt(start)) && UCharacter.isDigit(text.charAt(start+1))) { diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java index 06dc781e61d..fe24a29e438 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/Calendar.java @@ -1,5 +1,5 @@ /* -* Copyright (C) 1996-2013, International Business Machines +* Copyright (C) 1996-2014, International Business Machines * Corporation and others. All Rights Reserved. */ @@ -6080,6 +6080,21 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable 2003). + * The default implementation returns true. A subclass may + * return false if such practice is not applicable (for example, + * Chinese calendar and Japanese calendar). + * + * @return true if this calendar has a default century. + * @internal + * @deprecated This API is ICU internal only. + */ + public boolean haveDefaultCentury() { + return true; + } + // -------- BEGIN ULocale boilerplate -------- /** diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/ChineseCalendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/ChineseCalendar.java index 1cdfe2f79d1..6c69e6d785e 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/ChineseCalendar.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/ChineseCalendar.java @@ -1,5 +1,5 @@ /********************************************************************* - * Copyright (C) 2000-2012, International Business Machines + * Copyright (C) 2000-2014, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************* */ @@ -1017,6 +1017,15 @@ public class ChineseCalendar extends Calendar { return "chinese"; } + /** + * {@inheritDoc} + * @internal + * @deprecated This API is ICU internal only. + */ + public boolean haveDefaultCentury() { + return false; + } + /** * Override readObject. */ diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java index 9e71a79a272..f88fed9e98a 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/JapaneseCalendar.java @@ -1,6 +1,6 @@ /* ******************************************************************************* - * Copyright (C) 1996-2010,2012, International Business Machines Corporation and * + * Copyright (C) 1996-2014, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* */ @@ -636,6 +636,15 @@ public class JapaneseCalendar extends GregorianCalendar { return "japanese"; } + /** + * {@inheritDoc} + * @internal + * @deprecated This API is ICU internal only. + */ + public boolean haveDefaultCentury() { + return false; + } + /** * {@inheritDoc} * @stable ICU 4.0 @@ -661,4 +670,5 @@ public class JapaneseCalendar extends GregorianCalendar { } return super.getActualMaximum(field); } + }