diff --git a/icu4c/source/data/misc/metaZones.txt b/icu4c/source/data/misc/metaZones.txt index 4008abe81559..6e243d7dcaff 100644 --- a/icu4c/source/data/misc/metaZones.txt +++ b/icu4c/source/data/misc/metaZones.txt @@ -1261,6 +1261,11 @@ metaZones:table(nofallback){ "1990-03-20 22:00", "1994-03-20 22:00", } + { + "Africa_Western", + "1994-03-20 22:00", + "2017-10-23 22:00", + } { "Africa_Central", "2017-10-23 22:00", @@ -3837,6 +3842,18 @@ metaZones:table(nofallback){ "Europe_Central", } } + "Europe:Dublin"{ + { + "Irish", + "1970-01-01 00:00", + "1971-10-31 02:00", + } + { + "GMT", + "1971-10-31 02:00", + "9999-12-31 23:59", + } + } "Europe:Gibraltar"{ { "Europe_Central", diff --git a/icu4c/source/test/intltest/tztest.cpp b/icu4c/source/test/intltest/tztest.cpp index 988a5af21dc5..eaa719cb53b6 100644 --- a/icu4c/source/test/intltest/tztest.cpp +++ b/icu4c/source/test/intltest/tztest.cpp @@ -2395,9 +2395,16 @@ static struct { // Repeating the test data for DST. The test data below trigger the problem reported // by Ticket#6644 + {"Europe/London", "en", false, TimeZone::SHORT, "GMT" /*"BST"*/}, + {"Europe/London", "en", false, TimeZone::LONG, "Greenwich Mean Time"}, {"Europe/London", "en", true, TimeZone::SHORT, "GMT+1" /*"BST"*/}, {"Europe/London", "en", true, TimeZone::LONG, "British Summer Time"}, + {"Europe/Dublin", "en", false, TimeZone::SHORT, "GMT" /*"IST"*/}, + {"Europe/Dublin", "en", false, TimeZone::LONG, "Greenwich Mean Time"}, + {"Europe/Dublin", "en", true, TimeZone::SHORT, "GMT+1" /*"IST"*/}, + {"Europe/Dublin", "en", true, TimeZone::LONG, "Irish Standard Time"}, + {nullptr, nullptr, false, TimeZone::SHORT, nullptr} // nullptr values terminate list }; diff --git a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java index aba8730011c8..f1d23f0260eb 100644 --- a/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java +++ b/icu4j/main/common_tests/src/test/java/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java @@ -946,6 +946,15 @@ public void TestFormat() { "\u65E5\u672C\u6A19\u6E96\u6642", // "日本標準時" TimeType.UNKNOWN }, + // Regression test for ICU-23278 + { + "en", + "Europe/Dublin", + dateJan, + Style.SPECIFIC_LONG, + "Greenwich Mean Time", + TimeType.STANDARD + } }; for (Object[] testCase : TESTDATA) { diff --git a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/metaZones.res b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/metaZones.res index 9e51304776a6..e525fc1d1d21 100644 Binary files a/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/metaZones.res and b/icu4j/main/core/src/main/resources/com/ibm/icu/impl/data/icudata/metaZones.res differ diff --git a/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt b/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt index 6163d4b16b3f..3c0a5b5289ed 100644 --- a/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt +++ b/tools/cldr/cldr-to-icu/src/main/resources/ldml2icu_supplemental.txt @@ -319,14 +319,13 @@ # metaZones.xml - metaZones.txt //supplementalData/metaZones/mapTimezones[@type="metazones"]/mapZone[@type="(%A)"][@other="(%W)"][@territory="(%W)"] ; /mapTimezones/$2/$3 ; values=$1 //supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$2 -# For the from/to entries, ignore any stdOffset/dstOffset values for now, see CLDR-18880. -# Aalso note the path ordering of stdOffset/dstOffset vs mzone is odd, filed CLDR-18921 about that. //supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$3 "$2" "9999-12-31 23:59" //supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$4 "$2" "$3" //supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$3 "1970-01-01 00:00" "$2" -//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@stdOffset="(%A)"][@dstOffset="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$5 "$2" "9999-12-31 23:59" -//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@stdOffset="(%A)"][@dstOffset="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<$2> ; values=$6 "$2" "$3" -//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@stdOffset="(%A)"][@dstOffset="(%A)"][@mzone="(%W)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$5 "1970-01-01 00:00" "$2" +# Ignore any stdOffset/dstOffset values for now, see CLDR-18880. +//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<$2> ; values=$3 "$2" "9999-12-31 23:59" +//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@from="(%A)"][@to="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<$2> ; values=$4 "$2" "$3" +//supplementalData/metaZones/metazoneInfo/timezone[@type="(%W)"]/usesMetazone[@to="(%A)"][@mzone="(%W)"][@stdOffset="(%A)"][@dstOffset="(%A)"] ; /metazoneInfo/"$1"/<1970-01-01 00:00> ; values=$3 "1970-01-01 00:00" "$2" # //supplementalData/metaZones/metazoneIds/metazoneId[@shortId="(%A)"][@longId="(%A)"][@deprecated="false"] ; /metazoneIds/$1 ; values=$2