From 2cea868e024a6ba94fe1fdb6076da5fdea46d830 Mon Sep 17 00:00:00 2001 From: Peter Edberg Date: Fri, 23 Jun 2017 06:26:30 +0000 Subject: [PATCH] ICU-13006 DateFormat.setNumberFormat should clone the NumberFormat and also call setGroupingUsed(false) X-SVN-Rev: 40198 --- icu4c/source/i18n/datefmt.cpp | 1 + icu4c/source/test/intltest/numrgts.cpp | 3 +++ icu4j/main/classes/core/src/com/ibm/icu/text/DateFormat.java | 3 ++- .../ibm/icu/dev/test/format/NumberFormatRegressionTest.java | 5 +++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/icu4c/source/i18n/datefmt.cpp b/icu4c/source/i18n/datefmt.cpp index 3e879be4447..f6a0d892388 100644 --- a/icu4c/source/i18n/datefmt.cpp +++ b/icu4c/source/i18n/datefmt.cpp @@ -586,6 +586,7 @@ DateFormat::adoptNumberFormat(NumberFormat* newNumberFormat) delete fNumberFormat; fNumberFormat = newNumberFormat; newNumberFormat->setParseIntegerOnly(TRUE); + newNumberFormat->setGroupingUsed(FALSE); } //---------------------------------------------------------------------- diff --git a/icu4c/source/test/intltest/numrgts.cpp b/icu4c/source/test/intltest/numrgts.cpp index 5e449279d22..e4852bd4cdc 100644 --- a/icu4c/source/test/intltest/numrgts.cpp +++ b/icu4c/source/test/intltest/numrgts.cpp @@ -2684,6 +2684,9 @@ void NumberFormatRegressionTest::TestJ691(void) { // *** Here's the key: We don't want to have to do THIS: // nf->setParseIntegerOnly(TRUE); + // or this (with changes to fr_CH per cldrbug:9370): + // nf->setGroupingUsed(FALSE); + // so they are done in DateFormat::adoptNumberFormat // create the DateFormat DateFormat *df = DateFormat::createDateInstance(DateFormat::kShort, loc); diff --git a/icu4j/main/classes/core/src/com/ibm/icu/text/DateFormat.java b/icu4j/main/classes/core/src/com/ibm/icu/text/DateFormat.java index 7d120c9eee6..8e87423c6d3 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/text/DateFormat.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/text/DateFormat.java @@ -1571,11 +1571,12 @@ public abstract class DateFormat extends UFormat { */ public void setNumberFormat(NumberFormat newNumberFormat) { - this.numberFormat = newNumberFormat; + this.numberFormat = (NumberFormat)newNumberFormat.clone(); /*In order to parse String like "11.10.2001" to DateTime correctly in Locale("fr","CH") [Richard/GCL] */ this.numberFormat.setParseIntegerOnly(true); + this.numberFormat.setGroupingUsed(false); } /** diff --git a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatRegressionTest.java b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatRegressionTest.java index 4a983398051..d7d1f600efc 100644 --- a/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatRegressionTest.java +++ b/icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatRegressionTest.java @@ -73,8 +73,9 @@ public class NumberFormatRegressionTest extends com.ibm.icu.dev.test.TestFmwk { // *** Here's the key: We don't want to have to do THIS: //nf.setParseIntegerOnly(true); - // However with changes to fr_CH per cldrbug:9370 we have to do the following: - nf.setGroupingUsed(false); + // or this (with changes to fr_CH per cldrbug:9370): + //nf.setGroupingUsed(false); + // so they are done in DateFormat.setNumberFormat // create the DateFormat DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, loc); -- 2.40.0