19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 Google Inc.
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.util;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport junit.framework.TestCase;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Calendar;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.TimeZone;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * TimeUtilsTest tests the time zone guesser.
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class TimeUtilsTest extends TestCase {
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testMainstream() throws Exception {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] mainstream = new String[] {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/New_York", // Eastern
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Chicago", // Central
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Denver", // Mountain
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Los_Angeles", // Pacific
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Anchorage", // Alaska
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "Pacific/Honolulu", // Hawaii, no DST
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (String name : mainstream) {
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone tz = TimeZone.getTimeZone(name);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Calendar c = Calendar.getInstance(tz);
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone guess;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2008, Calendar.OCTOBER, 20, 12, 00, 00);
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, "us");
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2009, Calendar.JANUARY, 20, 12, 00, 00);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, "us");
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testWeird() throws Exception {
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] weird = new String[] {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Phoenix", // Mountain, no DST
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Adak", // Same as Hawaii, but with DST
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (String name : weird) {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone tz = TimeZone.getTimeZone(name);
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Calendar c = Calendar.getInstance(tz);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone guess;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2008, Calendar.OCTOBER, 20, 12, 00, 00);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, "us");
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testOld() throws Exception {
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] old = new String[] {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "America/Indiana/Indianapolis", // Eastern, formerly no DST
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (String name : old) {
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone tz = TimeZone.getTimeZone(name);
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Calendar c = Calendar.getInstance(tz);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone guess;
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2005, Calendar.OCTOBER, 20, 12, 00, 00);
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, "us");
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testWorld() throws Exception {
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] world = new String[] {
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ad", "Europe/Andorra",
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ae", "Asia/Dubai",
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "af", "Asia/Kabul",
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ag", "America/Antigua",
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ai", "America/Anguilla",
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "al", "Europe/Tirane",
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "am", "Asia/Yerevan",
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "an", "America/Curacao",
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ao", "Africa/Luanda",
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/McMurdo",
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/DumontDUrville",
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Casey",
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Davis",
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Mawson",
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Syowa",
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Rothera",
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aq", "Antarctica/Palmer",
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ar", "America/Argentina/Buenos_Aires",
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "as", "Pacific/Pago_Pago",
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "at", "Europe/Vienna",
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "au", "Australia/Sydney",
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "au", "Australia/Adelaide",
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "au", "Australia/Perth",
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "au", "Australia/Eucla",
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "aw", "America/Aruba",
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ax", "Europe/Mariehamn",
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "az", "Asia/Baku",
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ba", "Europe/Sarajevo",
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bb", "America/Barbados",
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bd", "Asia/Dhaka",
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "be", "Europe/Brussels",
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bf", "Africa/Ouagadougou",
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bg", "Europe/Sofia",
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bh", "Asia/Bahrain",
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bi", "Africa/Bujumbura",
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bj", "Africa/Porto-Novo",
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bm", "Atlantic/Bermuda",
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bn", "Asia/Brunei",
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bo", "America/La_Paz",
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "br", "America/Noronha",
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "br", "America/Sao_Paulo",
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "br", "America/Manaus",
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bs", "America/Nassau",
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bt", "Asia/Thimphu",
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bw", "Africa/Gaborone",
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "by", "Europe/Minsk",
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "bz", "America/Belize",
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/St_Johns",
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/Halifax",
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/Toronto",
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/Winnipeg",
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/Edmonton",
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ca", "America/Vancouver",
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cc", "Indian/Cocos",
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cd", "Africa/Lubumbashi",
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cd", "Africa/Kinshasa",
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cf", "Africa/Bangui",
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cg", "Africa/Brazzaville",
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ch", "Europe/Zurich",
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ci", "Africa/Abidjan",
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ck", "Pacific/Rarotonga",
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cl", "America/Santiago",
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cl", "Pacific/Easter",
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cm", "Africa/Douala",
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cn", "Asia/Shanghai",
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "co", "America/Bogota",
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cr", "America/Costa_Rica",
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cu", "America/Havana",
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cv", "Atlantic/Cape_Verde",
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cx", "Indian/Christmas",
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cy", "Asia/Nicosia",
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "cz", "Europe/Prague",
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "de", "Europe/Berlin",
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "dj", "Africa/Djibouti",
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "dk", "Europe/Copenhagen",
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "dm", "America/Dominica",
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "do", "America/Santo_Domingo",
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "dz", "Africa/Algiers",
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ec", "America/Guayaquil",
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ec", "Pacific/Galapagos",
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ee", "Europe/Tallinn",
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "eg", "Africa/Cairo",
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "eh", "Africa/El_Aaiun",
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "er", "Africa/Asmara",
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "es", "Europe/Madrid",
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "es", "Atlantic/Canary",
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "et", "Africa/Addis_Ababa",
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fi", "Europe/Helsinki",
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fj", "Pacific/Fiji",
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fk", "Atlantic/Stanley",
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fm", "Pacific/Ponape",
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fm", "Pacific/Truk",
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fo", "Atlantic/Faroe",
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "fr", "Europe/Paris",
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ga", "Africa/Libreville",
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gb", "Europe/London",
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gd", "America/Grenada",
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ge", "Asia/Tbilisi",
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gf", "America/Cayenne",
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gg", "Europe/Guernsey",
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gh", "Africa/Accra",
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gi", "Europe/Gibraltar",
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gl", "America/Danmarkshavn",
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gl", "America/Scoresbysund",
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gl", "America/Godthab",
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gl", "America/Thule",
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gm", "Africa/Banjul",
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gn", "Africa/Conakry",
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gp", "America/Guadeloupe",
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gq", "Africa/Malabo",
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gr", "Europe/Athens",
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gs", "Atlantic/South_Georgia",
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gt", "America/Guatemala",
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gu", "Pacific/Guam",
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gw", "Africa/Bissau",
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "gy", "America/Guyana",
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "hk", "Asia/Hong_Kong",
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "hn", "America/Tegucigalpa",
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "hr", "Europe/Zagreb",
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ht", "America/Port-au-Prince",
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "hu", "Europe/Budapest",
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "id", "Asia/Jayapura",
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "id", "Asia/Makassar",
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "id", "Asia/Jakarta",
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ie", "Europe/Dublin",
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "il", "Asia/Jerusalem",
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "im", "Europe/Isle_of_Man",
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "in", "Asia/Calcutta",
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "io", "Indian/Chagos",
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "iq", "Asia/Baghdad",
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ir", "Asia/Tehran",
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "is", "Atlantic/Reykjavik",
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "it", "Europe/Rome",
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "je", "Europe/Jersey",
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "jm", "America/Jamaica",
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "jo", "Asia/Amman",
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "jp", "Asia/Tokyo",
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ke", "Africa/Nairobi",
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kg", "Asia/Bishkek",
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kh", "Asia/Phnom_Penh",
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ki", "Pacific/Kiritimati",
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ki", "Pacific/Enderbury",
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ki", "Pacific/Tarawa",
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "km", "Indian/Comoro",
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kn", "America/St_Kitts",
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kp", "Asia/Pyongyang",
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kr", "Asia/Seoul",
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kw", "Asia/Kuwait",
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ky", "America/Cayman",
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kz", "Asia/Almaty",
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "kz", "Asia/Aqtau",
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "la", "Asia/Vientiane",
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lb", "Asia/Beirut",
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lc", "America/St_Lucia",
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "li", "Europe/Vaduz",
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lk", "Asia/Colombo",
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lr", "Africa/Monrovia",
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ls", "Africa/Maseru",
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lt", "Europe/Vilnius",
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lu", "Europe/Luxembourg",
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "lv", "Europe/Riga",
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ly", "Africa/Tripoli",
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ma", "Africa/Casablanca",
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mc", "Europe/Monaco",
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "md", "Europe/Chisinau",
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "me", "Europe/Podgorica",
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mg", "Indian/Antananarivo",
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mh", "Pacific/Majuro",
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mk", "Europe/Skopje",
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ml", "Africa/Bamako",
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mm", "Asia/Rangoon",
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mn", "Asia/Choibalsan",
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mn", "Asia/Hovd",
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mo", "Asia/Macau",
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mp", "Pacific/Saipan",
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mq", "America/Martinique",
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mr", "Africa/Nouakchott",
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ms", "America/Montserrat",
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mt", "Europe/Malta",
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mu", "Indian/Mauritius",
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mv", "Indian/Maldives",
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mw", "Africa/Blantyre",
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mx", "America/Mexico_City",
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mx", "America/Chihuahua",
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mx", "America/Tijuana",
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "my", "Asia/Kuala_Lumpur",
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "mz", "Africa/Maputo",
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "na", "Africa/Windhoek",
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nc", "Pacific/Noumea",
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ne", "Africa/Niamey",
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nf", "Pacific/Norfolk",
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ng", "Africa/Lagos",
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ni", "America/Managua",
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nl", "Europe/Amsterdam",
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "no", "Europe/Oslo",
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "np", "Asia/Katmandu",
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nr", "Pacific/Nauru",
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nu", "Pacific/Niue",
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nz", "Pacific/Auckland",
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "nz", "Pacific/Chatham",
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "om", "Asia/Muscat",
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pa", "America/Panama",
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pe", "America/Lima",
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pf", "Pacific/Gambier",
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pf", "Pacific/Marquesas",
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pf", "Pacific/Tahiti",
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pg", "Pacific/Port_Moresby",
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ph", "Asia/Manila",
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pk", "Asia/Karachi",
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pl", "Europe/Warsaw",
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pm", "America/Miquelon",
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pn", "Pacific/Pitcairn",
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pr", "America/Puerto_Rico",
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ps", "Asia/Gaza",
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pt", "Europe/Lisbon",
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pt", "Atlantic/Azores",
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "pw", "Pacific/Palau",
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "py", "America/Asuncion",
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "qa", "Asia/Qatar",
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "re", "Indian/Reunion",
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ro", "Europe/Bucharest",
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "rs", "Europe/Belgrade",
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Kamchatka",
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Magadan",
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Vladivostok",
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Yakutsk",
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Irkutsk",
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Krasnoyarsk",
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Novosibirsk",
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Asia/Yekaterinburg",
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Europe/Samara",
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Europe/Moscow",
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ru", "Europe/Kaliningrad",
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "rw", "Africa/Kigali",
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sa", "Asia/Riyadh",
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sb", "Pacific/Guadalcanal",
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sc", "Indian/Mahe",
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sd", "Africa/Khartoum",
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "se", "Europe/Stockholm",
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sg", "Asia/Singapore",
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sh", "Atlantic/St_Helena",
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "si", "Europe/Ljubljana",
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sj", "Arctic/Longyearbyen",
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sk", "Europe/Bratislava",
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sl", "Africa/Freetown",
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sm", "Europe/San_Marino",
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sn", "Africa/Dakar",
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "so", "Africa/Mogadishu",
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sr", "America/Paramaribo",
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "st", "Africa/Sao_Tome",
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sv", "America/El_Salvador",
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sy", "Asia/Damascus",
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "sz", "Africa/Mbabane",
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tc", "America/Grand_Turk",
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "td", "Africa/Ndjamena",
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tf", "Indian/Kerguelen",
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tg", "Africa/Lome",
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "th", "Asia/Bangkok",
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tj", "Asia/Dushanbe",
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tk", "Pacific/Fakaofo",
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tl", "Asia/Dili",
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tm", "Asia/Ashgabat",
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tn", "Africa/Tunis",
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "to", "Pacific/Tongatapu",
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tr", "Europe/Istanbul",
3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tt", "America/Port_of_Spain",
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tv", "Pacific/Funafuti",
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tw", "Asia/Taipei",
3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "tz", "Africa/Dar_es_Salaam",
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ua", "Europe/Kiev",
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ug", "Africa/Kampala",
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "um", "Pacific/Wake",
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "um", "Pacific/Johnston",
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "um", "Pacific/Midway",
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "America/New_York",
3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "America/Chicago",
3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "America/Denver",
3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "America/Los_Angeles",
3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "America/Anchorage",
3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "us", "Pacific/Honolulu",
3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "uy", "America/Montevideo",
3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "uz", "Asia/Tashkent",
3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "va", "Europe/Vatican",
3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "vc", "America/St_Vincent",
3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ve", "America/Caracas",
3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "vg", "America/Tortola",
3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "vi", "America/St_Thomas",
3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "vn", "Asia/Saigon",
3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "vu", "Pacific/Efate",
3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "wf", "Pacific/Wallis",
3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ws", "Pacific/Apia",
3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "ye", "Asia/Aden",
3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "yt", "Indian/Mayotte",
3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "za", "Africa/Johannesburg",
3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "zm", "Africa/Lusaka",
3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "zw", "Africa/Harare",
3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < world.length; i += 2) {
3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String country = world[i];
3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String name = world[i + 1];
3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone tz = TimeZone.getTimeZone(name);
3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Calendar c = Calendar.getInstance(tz);
3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone guess;
3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2009, Calendar.JULY, 20, 12, 00, 00);
3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, country);
3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2009, Calendar.JANUARY, 20, 12, 00, 00);
3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, country);
4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testWorldWeird() throws Exception {
4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] world = new String[] {
4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Distinguisable from Sydney only when DST not in effect
4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            "au", "Australia/Lord_Howe",
4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < world.length; i += 2) {
4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String country = world[i];
4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            String name = world[i + 1];
4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone tz = TimeZone.getTimeZone(name);
4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Calendar c = Calendar.getInstance(tz);
4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            TimeZone guess;
4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            c.set(2009, Calendar.JULY, 20, 12, 00, 00);
4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            guess = guess(c, country);
4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            assertEquals(name, guess.getID());
4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static TimeZone guess(Calendar c, String country) {
4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return TimeUtils.getTimeZone(c.get(c.ZONE_OFFSET) + c.get(c.DST_OFFSET),
4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                     c.get(c.DST_OFFSET) != 0,
4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                     c.getTimeInMillis(),
4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                     country);
4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
430901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert
431901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert    public void testFormatDuration() {
432901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("0", 0);
433901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("-1ms", -1);
434901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+1ms", 1);
435901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+10ms", 10);
436901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+100ms", 100);
437901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+101ms", 101);
438901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+330ms", 330);
439901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+1s330ms", 1330);
440901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertFormatDuration("+10s24ms", 10024);
441901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert    }
442901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert
443eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey    public void testFormatHugeDuration() {
444eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey        //assertFormatDuration("+15542d1h11m11s555ms", 1342833071555L);
445eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey        // TODO: improve formatDuration() API
446eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey        assertFormatDuration("+999d23h59m59s999ms", 1342833071555L);
447eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey        assertFormatDuration("-999d23h59m59s999ms", -1342833071555L);
448eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey    }
449eaaf396169abdbd213565cacb37dc0c9c391b365Jeff Sharkey
450901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert    private void assertFormatDuration(String expected, long duration) {
451901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        StringBuilder sb = new StringBuilder();
452901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        TimeUtils.formatDuration(duration, sb);
453901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert        assertEquals("formatDuration(" + duration + ")", expected, sb.toString());
454901b3796fd0954cc4b01bf95dbcbd88d87414e84Bjorn Bringert    }
4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
456