ICU-11468 ICU4J eclipse-icu52 timezone updates to 2014j, including test case updates. Merged from ICU4J maint-52 (r36919).

X-SVN-Rev: 36920
diff --git a/main/shared/data/icutzdata.jar b/main/shared/data/icutzdata.jar
index 238aaab..e7209ed 100755
--- a/main/shared/data/icutzdata.jar
+++ b/main/shared/data/icutzdata.jar
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:151722009ac041fe3c5a01e90a79b61e961c78a7f1d564f7c869c16ca3ba9279
-size 91201
+oid sha256:877e420d85be49af832075ada326e48c41f2fa82f263aff94db588d93effb830
+size 88535
diff --git a/main/tests/core/src/com/ibm/icu/dev/test/format/DateFormatTest.java b/main/tests/core/src/com/ibm/icu/dev/test/format/DateFormatTest.java
index f7200c6..d92b101 100644
--- a/main/tests/core/src/com/ibm/icu/dev/test/format/DateFormatTest.java
+++ b/main/tests/core/src/com/ibm/icu/dev/test/format/DateFormatTest.java
@@ -854,8 +854,8 @@
         { "en", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "India Standard Time", "Asia/Calcutta" },
 
         // Proper CLDR primary zone support #9733
-        { "en", "Asia/Shanghai", "2013-01-01T00:00:00Z", "VVVV", "China Time", "Asia/Shanghai" },
-        { "en", "Asia/Harbin", "2013-01-01T00:00:00Z", "VVVV", "Harbin Time", "Asia/Harbin" },
+        { "en", "America/Santiago", "2013-01-01T00:00:00Z", "VVVV", "Chile Time", "America/Santiago" },
+        { "en", "Pacific/Easter", "2013-01-01T00:00:00Z", "VVVV", "Easter Time", "Pacific/Easter" },
 
         // ==========
 
@@ -1067,10 +1067,6 @@
         { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "v", "\u5370\u5ea6\u65f6\u95f4", "Asia/Calcutta" },
         { "zh", "Asia/Calcutta", "2004-07-15T00:00:00Z", "vvvv", "\u5370\u5EA6\u65f6\u95f4", "Asia/Calcutta" },
 
-        // Proper CLDR primary zone support #9733
-        { "zh", "Asia/Shanghai", "2013-01-01T00:00:00Z", "VVVV", "\u4e2d\u56fd\u65f6\u95f4", "Asia/Shanghai" },
-        { "zh", "Asia/Harbin", "2013-01-01T00:00:00Z", "VVVV", "\u54c8\u5c14\u6ee8\u65f6\u95f4", "Asia/Harbin" },
-
         // ==========
 
         { "hi", "America/Los_Angeles", "2004-01-15T00:00:00Z", "Z", "-0800", "-8:00" },
@@ -3701,7 +3697,7 @@
         GregorianCalendar gcal = new GregorianCalendar(tz);
 
         gcal.clear();
-        gcal.set(1910, Calendar.JANUARY, 1, 12, 00);    // offset 8:05:57
+        gcal.set(1900, Calendar.JANUARY, 1, 12, 00);    // offset 8:05:43
         d1 = gcal.getTime();
 
         gcal.clear();
@@ -3711,7 +3707,7 @@
         gcal.clear();
         gcal.set(1970, Calendar.JANUARY, 1, 12, 00);
         dexp2 = gcal.getTime();
-        dexp1 = new Date(dexp2.getTime() - (5*60 + 57)*1000);   // subtract 5m57s
+        dexp1 = new Date(dexp2.getTime() - (5*60 + 43)*1000);   // subtract 5m43s
 
         DateFormat fmt = DateFormat.getTimeInstance(DateFormat.FULL, new ULocale("zh"));
         fmt.setTimeZone(tz);
diff --git a/main/tests/core/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java b/main/tests/core/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
index cfbb81a..8515b5b 100644
--- a/main/tests/core/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
+++ b/main/tests/core/src/com/ibm/icu/dev/test/format/TimeZoneFormatTest.java
@@ -1,6 +1,6 @@
 /*
  ********************************************************************************
- * Copyright (C) 2007-2014, Google, International Business Machines Corporation *
+ * Copyright (C) 2007-2015, Google, International Business Machines Corporation *
  * and others. All Rights Reserved.                                             *
  ********************************************************************************
  */
@@ -396,6 +396,11 @@
                         }
                     }
 
+                    if (id.equals("Pacific/Apia") && PATTERNS[patidx].equals("vvvv")
+                            && logKnownIssue("11052", "Ambiguous zone name - Samoa Time")) {
+                        continue;
+                    }
+
                     BasicTimeZone btz = (BasicTimeZone)TimeZone.getTimeZone(id, TimeZone.TIMEZONE_ICU);
                     TimeZone tz = TimeZone.getTimeZone(id);
                     sdf.setTimeZone(tz);
@@ -456,7 +461,8 @@
                                         .append(", time=").append(testTimes[testidx])
                                         .append(", restime=").append(restime)
                                         .append(", diff=").append(timeDiff);
-                                    if (expectedRoundTrip[testidx]) {
+                                    if (expectedRoundTrip[testidx]
+                                            && !isSpecialTimeRoundTripCase(LOCALES[locidx], id, PATTERNS[patidx], testTimes[testidx])) {
                                         errln("FAIL: " + msg.toString());
                                     } else if (REALLY_VERBOSE_LOG) {
                                         logln(msg.toString());
@@ -495,6 +501,31 @@
         logln("Iteration: " + testCounts);
     }
 
+    // Special exclusions in TestTimeZoneRoundTrip.
+    // These special cases do not round trip time as designed.
+    private boolean isSpecialTimeRoundTripCase(ULocale loc, String id, String pattern, long time) {
+        final Object[][] EXCLUSIONS = {
+            {null, "Asia/Chita", "zzzz", Long.valueOf(1414252800000L)},
+            {null, "Asia/Chita", "vvvv", Long.valueOf(1414252800000L)},
+            {null, "Asia/Srednekolymsk", "zzzz", Long.valueOf(1414241999999L)},
+            {null, "Asia/Srednekolymsk", "vvvv", Long.valueOf(1414241999999L)},
+        };
+        boolean isExcluded = false;
+        for (Object[] excl : EXCLUSIONS) {
+            if (excl[0] == null || loc.equals((ULocale)excl[0])) {
+                if (id.equals(excl[1])) {
+                    if (excl[2] == null || pattern.equals((String)excl[2])) {
+                        if (excl[3] == null || ((Long)excl[3]).compareTo(time) == 0) {
+                            isExcluded = true;
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return isExcluded;
+    }
+
     public void TestParse() {
         final Object[][] DATA = {
         //   text                   inpos       locale      style                       parseAll?   expected            outpos      time type
diff --git a/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java b/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
index b572c05..2b2af44 100644
--- a/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
+++ b/main/tests/core/src/com/ibm/icu/dev/test/timezone/TimeZoneTest.java
@@ -1,6 +1,6 @@
 /**
  *******************************************************************************
- * Copyright (C) 2000-2014, International Business Machines Corporation and    *
+ * Copyright (C) 2000-2015, International Business Machines Corporation and    *
  * others. All Rights Reserved.                                                *
  *******************************************************************************
  */
@@ -1475,18 +1475,50 @@
         // Some canonical IDs in CLDR are defined as "Link"
         // in Olson tzdata.
         final String[][] excluded1 = {
+                {"Africa/Addis_Ababa", "Africa/Nairobi"},
+                {"Africa/Asmera", "Africa/Nairobi"},
+                {"Africa/Bamako", "Africa/Abidjan"},
+                {"Africa/Bangui", "Africa/Lagos"},
+                {"Africa/Banjul", "Africa/Abidjan"},
+                {"Africa/Blantyre", "Africa/Maputo"},
+                {"Africa/Brazzaville", "Africa/Lagos"},
+                {"Africa/Bujumbura", "Africa/Maputo"},
+                {"Africa/Conakry", "Africa/Abidjan"},
+                {"Africa/Dakar", "Africa/Abidjan"},
+                {"Africa/Dar_es_Salaam", "Africa/Nairobi"},
+                {"Africa/Djibouti", "Africa/Nairobi"},
+                {"Africa/Douala", "Africa/Lagos"},
+                {"Africa/Freetown", "Africa/Abidjan"},
+                {"Africa/Gaborone", "Africa/Maputo"},
+                {"Africa/Harare", "Africa/Maputo"},
+                {"Africa/Kampala", "Africa/Nairobi"},
                 {"Africa/Khartoum", "Africa/Juba"},
-                {"America/Shiprock", "America/Denver"}, // America/Shiprock is defined as a Link to America/Denver in tzdata
-                {"America/Kralendijk", "America/Curacao"},
-                {"America/Lower_Princes", "America/Curacao"},
-                {"America/Marigot", "America/Guadeloupe"},
-                {"America/St_Barthelemy", "America/Guadeloupe"},
+                {"Africa/Kigali", "Africa/Maputo"},
+                {"Africa/Kinshasa", "Africa/Lagos"},
+                {"Africa/Libreville", "Africa/Lagos"},
+                {"Africa/Lome", "Africa/Abidjan"},
+                {"Africa/Luanda", "Africa/Lagos"},
+                {"Africa/Lubumbashi", "Africa/Maputo"},
+                {"Africa/Lusaka", "Africa/Maputo"},
+                {"Africa/Maseru", "Africa/Johannesburg"},
+                {"Africa/Malabo", "Africa/Lagos"},
+                {"Africa/Mbabane", "Africa/Johannesburg"},
+                {"Africa/Mogadishu", "Africa/Nairobi"},
+                {"Africa/Niamey", "Africa/Lagos"},
+                {"Africa/Nouakchott", "Africa/Abidjan"},
+                {"Africa/Ouagadougou", "Africa/Abidjan"},
+                {"Africa/Porto-Novo", "Africa/Lagos"},
+                {"Africa/Sao_Tome", "Africa/Abidjan"},
+                {"America/Curacao", "America/Aruba"},
                 {"America/Dominica", "America/Anguilla"},
                 {"America/Grenada", "America/Anguilla"},
                 {"America/Guadeloupe", "America/Anguilla"},
+                {"America/Kralendijk", "America/Aruba"},
+                {"America/Lower_Princes", "America/Aruba"},
                 {"America/Marigot", "America/Anguilla"},
                 {"America/Montserrat", "America/Anguilla"},
                 {"America/Port_of_Spain", "America/Anguilla"},
+                {"America/Shiprock", "America/Denver"}, // America/Shiprock is defined as a Link to America/Denver in tzdata
                 {"America/St_Barthelemy", "America/Anguilla"},
                 {"America/St_Kitts", "America/Anguilla"},
                 {"America/St_Lucia", "America/Anguilla"},
@@ -1494,26 +1526,29 @@
                 {"America/St_Vincent", "America/Anguilla"},
                 {"America/Tortola", "America/Anguilla"},
                 {"America/Virgin", "America/Anguilla"},
-                {"America/Curacao", "America/Aruba"},
-                {"America/Kralendijk", "America/Aruba"},
-                {"America/Lower_Princes", "America/Aruba"},
                 {"Antarctica/South_Pole", "Antarctica/McMurdo"},
-                {"Atlantic/Jan_Mayen", "Europe/Oslo"},
                 {"Arctic/Longyearbyen", "Europe/Oslo"},
+                {"Asia/Phnom_Penh", "Asia/Bangkok"},
+                {"Asia/Vientiane", "Asia/Bangkok"},
+                {"Atlantic/Jan_Mayen", "Europe/Oslo"},
+                {"Atlantic/St_Helena", "Africa/Abidjan"},
+                {"Europe/Bratislava", "Europe/Prague"},
                 {"Europe/Busingen", "Europe/Zurich"},
                 {"Europe/Guernsey", "Europe/London"},
                 {"Europe/Isle_of_Man", "Europe/London"},
                 {"Europe/Jersey", "Europe/London"},
                 {"Europe/Ljubljana", "Europe/Belgrade"},
+                {"Europe/Mariehamn", "Europe/Helsinki"},
                 {"Europe/Podgorica", "Europe/Belgrade"},
+                {"Europe/San_Marino", "Europe/Rome"},
                 {"Europe/Sarajevo", "Europe/Belgrade"},
                 {"Europe/Skopje", "Europe/Belgrade"},
-                {"Europe/Zagreb", "Europe/Belgrade"},
-                {"Europe/Bratislava", "Europe/Prague"},
-                {"Europe/Mariehamn", "Europe/Helsinki"},
-                {"Europe/San_Marino", "Europe/Rome"},
-                {"Europe/Vatican", "Europe/Rome"},
                 {"Europe/Vaduz", "Europe/Zurich"},
+                {"Europe/Vatican", "Europe/Rome"},
+                {"Europe/Zagreb", "Europe/Belgrade"},
+                {"Indian/Antananarivo", "Africa/Nairobi"},
+                {"Indian/Comoro", "Africa/Nairobi"},
+                {"Indian/Mayotte", "Africa/Nairobi"},
                 {"Pacific/Auckland", "Antarctica/McMurdo"},
                 {"Pacific/Johnston", "Pacific/Honolulu"},
         };