diff --git a/examples/timezones/model/get.php b/examples/timezones/model/get.php index 210740fd..d4647ac0 100644 --- a/examples/timezones/model/get.php +++ b/examples/timezones/model/get.php @@ -16,7 +16,9 @@ $token = new \Tmdb\ApiToken(TMDB_API_KEY); $client = new \Tmdb\Client($token); -$repository = new \Tmdb\Repository\CollectionRepository($client); -$collection = $repository->load(10); +$repository = new \Tmdb\Repository\TimezoneRepository($client); +$timezones = $repository->getTimezones(); -var_dump($collection); +var_dump($timezones->getCountry('NL')->supports('Europe/Amsterdam')); + +var_dump($timezones); diff --git a/lib/Tmdb/Factory/TimezoneFactory.php b/lib/Tmdb/Factory/TimezoneFactory.php new file mode 100644 index 00000000..6027be34 --- /dev/null +++ b/lib/Tmdb/Factory/TimezoneFactory.php @@ -0,0 +1,56 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Factory; + +use Tmdb\Model\Collection\Timezones; +use Tmdb\Model\Timezone; + +/** + * Class TimezoneFactory + * @package Tmdb\Factory + */ +class TimezoneFactory extends AbstractFactory +{ + /** + * @param array $data + * + * @return Timezone\CountryTimezone + */ + public function create(array $data = array()) + { + return $this->hydrate(new Timezone\CountryTimezone(), $data); + } + + /** + * {@inheritdoc} + */ + public function createCollection(array $data = array()) + { + $collection = new Timezones(); + + foreach ($data as $foobar_data) { + foreach ($foobar_data as $iso_3166_1 => $timezones) { + $country = new Timezone\CountryTimezone(); + $country->setIso31661($iso_3166_1); + + foreach ($timezones as $timezone) { + $country->getTimezones()->add(null, $timezone); + } + + $collection->add(null, $country); + } + } + + return $collection; + } +} diff --git a/lib/Tmdb/Model/Collection/Timezones.php b/lib/Tmdb/Model/Collection/Timezones.php new file mode 100644 index 00000000..6cda1120 --- /dev/null +++ b/lib/Tmdb/Model/Collection/Timezones.php @@ -0,0 +1,60 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Model\Collection; + +use Tmdb\Model\Common\GenericCollection; +use Tmdb\Model\Timezone\CountryTimezone; + +/** + * Class Timezones + * @package Tmdb\Model\Collection + */ +class Timezones extends GenericCollection +{ + /** + * Returns all countries with timezones + * + * @return array + */ + public function getCountries() + { + return $this->data; + } + + /** + * Retrieve a country from the collection + * + * @param $id + * @return CountryTimezone|null + */ + public function getCountry($id) + { + foreach ($this->data as $country) { + if (strtoupper($id) == (string) $country) { + return $country; + } + } + + return null; + } + + /** + * Add a timezone to the collection + * + * @param CountryTimezone $country + */ + public function addCountry($country) + { + $this->data[] = $country; + } +} diff --git a/lib/Tmdb/Model/Common/GenericCollection.php b/lib/Tmdb/Model/Common/GenericCollection.php index 8029c4f8..1fdd36da 100644 --- a/lib/Tmdb/Model/Common/GenericCollection.php +++ b/lib/Tmdb/Model/Common/GenericCollection.php @@ -133,8 +133,10 @@ public function add($key, $value) $key = spl_object_hash($value); } - if (!array_key_exists($key, $this->data)) { + if (!array_key_exists($key, $this->data) && null !== $key) { $this->data[$key] = $value; + } elseif (!array_key_exists($key, $this->data) && null == $key) { + $this->data[] = $value; } elseif (is_array($this->data[$key])) { $this->data[$key][] = $value; } else { diff --git a/lib/Tmdb/Model/Timezone/CountryTimezone.php b/lib/Tmdb/Model/Timezone/CountryTimezone.php new file mode 100644 index 00000000..f02a3335 --- /dev/null +++ b/lib/Tmdb/Model/Timezone/CountryTimezone.php @@ -0,0 +1,96 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Model\Timezone; + +use Tmdb\Model\AbstractModel; +use Tmdb\Model\Collection\Timezones; +use Tmdb\Model\Common\GenericCollection; + +/** + * Class Timezone + * @package Tmdb\Model\Certification + */ +class CountryTimezone extends AbstractModel +{ + /** + * @var string + */ + private $iso31661; + + /** + * @var Timezones + */ + private $timezones; + + public function __construct() + { + $this->timezones = new GenericCollection(); + } + + /** + * @param \Tmdb\Model\Collection\Timezones $timezones + * @return $this + */ + public function setTimezones($timezones) + { + $this->timezones = $timezones; + + return $this; + } + + /** + * @return \Tmdb\Model\Collection\Timezones + */ + public function getTimezones() + { + return $this->timezones; + } + + /** + * @param string $iso31661 + * @return $this + */ + public function setIso31661($iso31661) + { + $this->iso31661 = $iso31661; + + return $this; + } + + /** + * @return string + */ + public function getIso31661() + { + return $this->iso31661; + } + + /** + * Verify if a country supports a certain timezone + * + * @param $timezone + * @return mixed + */ + public function supports($timezone) + { + return false !== $this->timezones->hasValue($timezone); + } + + /** + * @return string + */ + public function __toString() + { + return $this->iso31661; + } +} diff --git a/lib/Tmdb/Repository/TimezoneRepository.php b/lib/Tmdb/Repository/TimezoneRepository.php new file mode 100644 index 00000000..98138f56 --- /dev/null +++ b/lib/Tmdb/Repository/TimezoneRepository.php @@ -0,0 +1,56 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Repository; + +use Tmdb\Factory\TimezoneFactory; +use Tmdb\Model\Collection\Timezones; + +/** + * Class TimezoneRepository + * @package Tmdb\Repository + * @see http://docs.themoviedb.apiary.io/#timezones + */ +class TimezoneRepository extends AbstractRepository +{ + /** + * Get the list of supported timezones for the API methods that support them. + * + * @param $parameters + * @param $headers + * @return Timezones + */ + public function getTimezones(array $parameters = array(), array $headers = array()) + { + $data = $this->getApi()->getTimezones($this->parseQueryParameters($parameters), $headers); + + return $this->getFactory()->createCollection($data); + } + + /** + * Return the Collection API Class + * + * @return \Tmdb\Api\Timezones + */ + public function getApi() + { + return $this->getClient()->getTimezonesApi(); + } + + /** + * @return TimezoneFactory + */ + public function getFactory() + { + return new TimezoneFactory(); + } +} diff --git a/test/Tmdb/Tests/Factory/TimezoneFactoryTest.php b/test/Tmdb/Tests/Factory/TimezoneFactoryTest.php new file mode 100644 index 00000000..49753ebe --- /dev/null +++ b/test/Tmdb/Tests/Factory/TimezoneFactoryTest.php @@ -0,0 +1,57 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +namespace Tmdb\Tests\Factory; + +use Tmdb\Factory\TimezoneFactory; +use Tmdb\Model\Timezone\CountryTimezone; + +class TimezoneFactoryTest extends TestCase +{ + private $data; + + public function setUp() + { + $this->data = $this->loadByFile('timezones/get.json'); + } + + /** + * @test + */ + public function shouldConstructTimezones() + { + /** + * @var TimezoneFactory $factory + */ + $factory = $this->getFactory(); + $timezonesCollection = $factory->createCollection($this->data); + + $this->assertInstanceOf('Tmdb\Model\Collection\Timezones', $timezonesCollection); + + /** + * @var CountryTimezone $countryTimezone + */ + foreach ($timezonesCollection as $countryTimezone) { + $this->assertInstanceOf('Tmdb\Model\Timezone\CountryTimezone', $countryTimezone); + $this->assertNotEmpty($countryTimezone->getIso31661()); + + foreach ($countryTimezone->getTimezones() as $timezone) { + $this->assertNotEmpty($timezone); + } + } + } + + protected function getFactoryClass() + { + return 'Tmdb\Factory\TimezoneFactory'; + } +} diff --git a/test/Tmdb/Tests/Resources/timezones/get.json b/test/Tmdb/Tests/Resources/timezones/get.json new file mode 100644 index 00000000..c453803f --- /dev/null +++ b/test/Tmdb/Tests/Resources/timezones/get.json @@ -0,0 +1,1411 @@ +[ + { + "AD": [ + "Europe/Andorra" + ] + }, + { + "AE": [ + "Asia/Dubai" + ] + }, + { + "AF": [ + "Asia/Kabul" + ] + }, + { + "AG": [ + "America/Antigua" + ] + }, + { + "AI": [ + "America/Anguilla" + ] + }, + { + "AL": [ + "Europe/Tirane" + ] + }, + { + "AM": [ + "Asia/Yerevan" + ] + }, + { + "AO": [ + "Africa/Luanda" + ] + }, + { + "AQ": [ + "Antarctica/McMurdo", + "Antarctica/Rothera", + "Antarctica/Palmer", + "Antarctica/Mawson", + "Antarctica/Davis", + "Antarctica/Casey", + "Antarctica/Vostok", + "Antarctica/DumontDUrville", + "Antarctica/Syowa" + ] + }, + { + "AR": [ + "America/Argentina/Buenos_Aires", + "America/Argentina/Cordoba", + "America/Argentina/Salta", + "America/Argentina/Jujuy", + "America/Argentina/Tucuman", + "America/Argentina/Catamarca", + "America/Argentina/La_Rioja", + "America/Argentina/San_Juan", + "America/Argentina/Mendoza", + "America/Argentina/San_Luis", + "America/Argentina/Rio_Gallegos", + "America/Argentina/Ushuaia" + ] + }, + { + "AS": [ + "Pacific/Pago_Pago" + ] + }, + { + "AT": [ + "Europe/Vienna" + ] + }, + { + "AU": [ + "Australia/Lord_Howe", + "Antarctica/Macquarie", + "Australia/Hobart", + "Australia/Currie", + "Australia/Melbourne", + "Australia/Sydney", + "Australia/Broken_Hill", + "Australia/Brisbane", + "Australia/Lindeman", + "Australia/Adelaide", + "Australia/Darwin", + "Australia/Perth", + "Australia/Eucla" + ] + }, + { + "AW": [ + "America/Aruba" + ] + }, + { + "AX": [ + "Europe/Mariehamn" + ] + }, + { + "AZ": [ + "Asia/Baku" + ] + }, + { + "BA": [ + "Europe/Sarajevo" + ] + }, + { + "BB": [ + "America/Barbados" + ] + }, + { + "BD": [ + "Asia/Dhaka" + ] + }, + { + "BE": [ + "Europe/Brussels" + ] + }, + { + "BF": [ + "Africa/Ouagadougou" + ] + }, + { + "BG": [ + "Europe/Sofia" + ] + }, + { + "BH": [ + "Asia/Bahrain" + ] + }, + { + "BI": [ + "Africa/Bujumbura" + ] + }, + { + "BJ": [ + "Africa/Porto-Novo" + ] + }, + { + "BL": [ + "America/St_Barthelemy" + ] + }, + { + "BM": [ + "Atlantic/Bermuda" + ] + }, + { + "BN": [ + "Asia/Brunei" + ] + }, + { + "BO": [ + "America/La_Paz" + ] + }, + { + "BQ": [ + "America/Kralendijk" + ] + }, + { + "BR": [ + "America/Noronha", + "America/Belem", + "America/Fortaleza", + "America/Recife", + "America/Araguaina", + "America/Maceio", + "America/Bahia", + "America/Sao_Paulo", + "America/Campo_Grande", + "America/Cuiaba", + "America/Santarem", + "America/Porto_Velho", + "America/Boa_Vista", + "America/Manaus", + "America/Eirunepe", + "America/Rio_Branco" + ] + }, + { + "BS": [ + "America/Nassau" + ] + }, + { + "BT": [ + "Asia/Thimphu" + ] + }, + { + "BV": [] + }, + { + "BW": [ + "Africa/Gaborone" + ] + }, + { + "BY": [ + "Europe/Minsk" + ] + }, + { + "BZ": [ + "America/Belize" + ] + }, + { + "CA": [ + "America/St_Johns", + "America/Halifax", + "America/Glace_Bay", + "America/Moncton", + "America/Goose_Bay", + "America/Blanc-Sablon", + "America/Toronto", + "America/Nipigon", + "America/Thunder_Bay", + "America/Iqaluit", + "America/Pangnirtung", + "America/Resolute", + "America/Atikokan", + "America/Rankin_Inlet", + "America/Winnipeg", + "America/Rainy_River", + "America/Regina", + "America/Swift_Current", + "America/Edmonton", + "America/Cambridge_Bay", + "America/Yellowknife", + "America/Inuvik", + "America/Creston", + "America/Dawson_Creek", + "America/Vancouver", + "America/Whitehorse", + "America/Dawson" + ] + }, + { + "CC": [ + "Indian/Cocos" + ] + }, + { + "CD": [ + "Africa/Kinshasa", + "Africa/Lubumbashi" + ] + }, + { + "CF": [ + "Africa/Bangui" + ] + }, + { + "CG": [ + "Africa/Brazzaville" + ] + }, + { + "CH": [ + "Europe/Zurich" + ] + }, + { + "CI": [ + "Africa/Abidjan" + ] + }, + { + "CK": [ + "Pacific/Rarotonga" + ] + }, + { + "CL": [ + "America/Santiago", + "Pacific/Easter" + ] + }, + { + "CM": [ + "Africa/Douala" + ] + }, + { + "CN": [ + "Asia/Shanghai", + "Asia/Harbin", + "Asia/Chongqing", + "Asia/Urumqi", + "Asia/Kashgar" + ] + }, + { + "CO": [ + "America/Bogota" + ] + }, + { + "CR": [ + "America/Costa_Rica" + ] + }, + { + "CU": [ + "America/Havana" + ] + }, + { + "CV": [ + "Atlantic/Cape_Verde" + ] + }, + { + "CW": [ + "America/Curacao" + ] + }, + { + "CX": [ + "Indian/Christmas" + ] + }, + { + "CY": [ + "Asia/Nicosia" + ] + }, + { + "CZ": [ + "Europe/Prague" + ] + }, + { + "DE": [ + "Europe/Berlin", + "Europe/Busingen" + ] + }, + { + "DJ": [ + "Africa/Djibouti" + ] + }, + { + "DK": [ + "Europe/Copenhagen" + ] + }, + { + "DM": [ + "America/Dominica" + ] + }, + { + "DO": [ + "America/Santo_Domingo" + ] + }, + { + "DZ": [ + "Africa/Algiers" + ] + }, + { + "EC": [ + "America/Guayaquil", + "Pacific/Galapagos" + ] + }, + { + "EE": [ + "Europe/Tallinn" + ] + }, + { + "EG": [ + "Africa/Cairo" + ] + }, + { + "EH": [ + "Africa/El_Aaiun" + ] + }, + { + "ER": [ + "Africa/Asmara" + ] + }, + { + "ES": [ + "Europe/Madrid", + "Africa/Ceuta", + "Atlantic/Canary" + ] + }, + { + "ET": [ + "Africa/Addis_Ababa" + ] + }, + { + "FI": [ + "Europe/Helsinki" + ] + }, + { + "FJ": [ + "Pacific/Fiji" + ] + }, + { + "FK": [ + "Atlantic/Stanley" + ] + }, + { + "FM": [ + "Pacific/Chuuk", + "Pacific/Pohnpei", + "Pacific/Kosrae" + ] + }, + { + "FO": [ + "Atlantic/Faroe" + ] + }, + { + "FR": [ + "Europe/Paris" + ] + }, + { + "GA": [ + "Africa/Libreville" + ] + }, + { + "GB": [ + "Europe/London" + ] + }, + { + "GD": [ + "America/Grenada" + ] + }, + { + "GE": [ + "Asia/Tbilisi" + ] + }, + { + "GF": [ + "America/Cayenne" + ] + }, + { + "GG": [ + "Europe/Guernsey" + ] + }, + { + "GH": [ + "Africa/Accra" + ] + }, + { + "GI": [ + "Europe/Gibraltar" + ] + }, + { + "GL": [ + "America/Godthab", + "America/Danmarkshavn", + "America/Scoresbysund", + "America/Thule" + ] + }, + { + "GM": [ + "Africa/Banjul" + ] + }, + { + "GN": [ + "Africa/Conakry" + ] + }, + { + "GP": [ + "America/Guadeloupe" + ] + }, + { + "GQ": [ + "Africa/Malabo" + ] + }, + { + "GR": [ + "Europe/Athens" + ] + }, + { + "GS": [ + "Atlantic/South_Georgia" + ] + }, + { + "GT": [ + "America/Guatemala" + ] + }, + { + "GU": [ + "Pacific/Guam" + ] + }, + { + "GW": [ + "Africa/Bissau" + ] + }, + { + "GY": [ + "America/Guyana" + ] + }, + { + "HK": [ + "Asia/Hong_Kong" + ] + }, + { + "HM": [] + }, + { + "HN": [ + "America/Tegucigalpa" + ] + }, + { + "HR": [ + "Europe/Zagreb" + ] + }, + { + "HT": [ + "America/Port-au-Prince" + ] + }, + { + "HU": [ + "Europe/Budapest" + ] + }, + { + "ID": [ + "Asia/Jakarta", + "Asia/Pontianak", + "Asia/Makassar", + "Asia/Jayapura" + ] + }, + { + "IE": [ + "Europe/Dublin" + ] + }, + { + "IL": [ + "Asia/Jerusalem" + ] + }, + { + "IM": [ + "Europe/Isle_of_Man" + ] + }, + { + "IN": [ + "Asia/Kolkata" + ] + }, + { + "IO": [ + "Indian/Chagos" + ] + }, + { + "IQ": [ + "Asia/Baghdad" + ] + }, + { + "IR": [ + "Asia/Tehran" + ] + }, + { + "IS": [ + "Atlantic/Reykjavik" + ] + }, + { + "IT": [ + "Europe/Rome" + ] + }, + { + "JE": [ + "Europe/Jersey" + ] + }, + { + "JM": [ + "America/Jamaica" + ] + }, + { + "JO": [ + "Asia/Amman" + ] + }, + { + "JP": [ + "Asia/Tokyo" + ] + }, + { + "KE": [ + "Africa/Nairobi" + ] + }, + { + "KG": [ + "Asia/Bishkek" + ] + }, + { + "KH": [ + "Asia/Phnom_Penh" + ] + }, + { + "KI": [ + "Pacific/Tarawa", + "Pacific/Enderbury", + "Pacific/Kiritimati" + ] + }, + { + "KM": [ + "Indian/Comoro" + ] + }, + { + "KN": [ + "America/St_Kitts" + ] + }, + { + "KP": [ + "Asia/Pyongyang" + ] + }, + { + "KR": [ + "Asia/Seoul" + ] + }, + { + "KW": [ + "Asia/Kuwait" + ] + }, + { + "KY": [ + "America/Cayman" + ] + }, + { + "KZ": [ + "Asia/Almaty", + "Asia/Qyzylorda", + "Asia/Aqtobe", + "Asia/Aqtau", + "Asia/Oral" + ] + }, + { + "LA": [ + "Asia/Vientiane" + ] + }, + { + "LB": [ + "Asia/Beirut" + ] + }, + { + "LC": [ + "America/St_Lucia" + ] + }, + { + "LI": [ + "Europe/Vaduz" + ] + }, + { + "LK": [ + "Asia/Colombo" + ] + }, + { + "LR": [ + "Africa/Monrovia" + ] + }, + { + "LS": [ + "Africa/Maseru" + ] + }, + { + "LT": [ + "Europe/Vilnius" + ] + }, + { + "LU": [ + "Europe/Luxembourg" + ] + }, + { + "LV": [ + "Europe/Riga" + ] + }, + { + "LY": [ + "Africa/Tripoli" + ] + }, + { + "MA": [ + "Africa/Casablanca" + ] + }, + { + "MC": [ + "Europe/Monaco" + ] + }, + { + "MD": [ + "Europe/Chisinau" + ] + }, + { + "ME": [ + "Europe/Podgorica" + ] + }, + { + "MF": [ + "America/Marigot" + ] + }, + { + "MG": [ + "Indian/Antananarivo" + ] + }, + { + "MH": [ + "Pacific/Majuro", + "Pacific/Kwajalein" + ] + }, + { + "MK": [ + "Europe/Skopje" + ] + }, + { + "ML": [ + "Africa/Bamako" + ] + }, + { + "MM": [ + "Asia/Rangoon" + ] + }, + { + "MN": [ + "Asia/Ulaanbaatar", + "Asia/Hovd", + "Asia/Choibalsan" + ] + }, + { + "MO": [ + "Asia/Macau" + ] + }, + { + "MP": [ + "Pacific/Saipan" + ] + }, + { + "MQ": [ + "America/Martinique" + ] + }, + { + "MR": [ + "Africa/Nouakchott" + ] + }, + { + "MS": [ + "America/Montserrat" + ] + }, + { + "MT": [ + "Europe/Malta" + ] + }, + { + "MU": [ + "Indian/Mauritius" + ] + }, + { + "MV": [ + "Indian/Maldives" + ] + }, + { + "MW": [ + "Africa/Blantyre" + ] + }, + { + "MX": [ + "America/Mexico_City", + "America/Cancun", + "America/Merida", + "America/Monterrey", + "America/Matamoros", + "America/Mazatlan", + "America/Chihuahua", + "America/Ojinaga", + "America/Hermosillo", + "America/Tijuana", + "America/Santa_Isabel", + "America/Bahia_Banderas" + ] + }, + { + "MY": [ + "Asia/Kuala_Lumpur", + "Asia/Kuching" + ] + }, + { + "MZ": [ + "Africa/Maputo" + ] + }, + { + "NA": [ + "Africa/Windhoek" + ] + }, + { + "NC": [ + "Pacific/Noumea" + ] + }, + { + "NE": [ + "Africa/Niamey" + ] + }, + { + "NF": [ + "Pacific/Norfolk" + ] + }, + { + "NG": [ + "Africa/Lagos" + ] + }, + { + "NI": [ + "America/Managua" + ] + }, + { + "NL": [ + "Europe/Amsterdam" + ] + }, + { + "NO": [ + "Europe/Oslo" + ] + }, + { + "NP": [ + "Asia/Kathmandu" + ] + }, + { + "NR": [ + "Pacific/Nauru" + ] + }, + { + "NU": [ + "Pacific/Niue" + ] + }, + { + "NZ": [ + "Pacific/Auckland", + "Pacific/Chatham" + ] + }, + { + "OM": [ + "Asia/Muscat" + ] + }, + { + "PA": [ + "America/Panama" + ] + }, + { + "PE": [ + "America/Lima" + ] + }, + { + "PF": [ + "Pacific/Tahiti", + "Pacific/Marquesas", + "Pacific/Gambier" + ] + }, + { + "PG": [ + "Pacific/Port_Moresby" + ] + }, + { + "PH": [ + "Asia/Manila" + ] + }, + { + "PK": [ + "Asia/Karachi" + ] + }, + { + "PL": [ + "Europe/Warsaw" + ] + }, + { + "PM": [ + "America/Miquelon" + ] + }, + { + "PN": [ + "Pacific/Pitcairn" + ] + }, + { + "PR": [ + "America/Puerto_Rico" + ] + }, + { + "PS": [ + "Asia/Gaza", + "Asia/Hebron" + ] + }, + { + "PT": [ + "Europe/Lisbon", + "Atlantic/Madeira", + "Atlantic/Azores" + ] + }, + { + "PW": [ + "Pacific/Palau" + ] + }, + { + "PY": [ + "America/Asuncion" + ] + }, + { + "QA": [ + "Asia/Qatar" + ] + }, + { + "RE": [ + "Indian/Reunion" + ] + }, + { + "RO": [ + "Europe/Bucharest" + ] + }, + { + "RS": [ + "Europe/Belgrade" + ] + }, + { + "RU": [ + "Europe/Kaliningrad", + "Europe/Moscow", + "Europe/Volgograd", + "Europe/Samara", + "Asia/Yekaterinburg", + "Asia/Omsk", + "Asia/Novosibirsk", + "Asia/Novokuznetsk", + "Asia/Krasnoyarsk", + "Asia/Irkutsk", + "Asia/Yakutsk", + "Asia/Khandyga", + "Asia/Vladivostok", + "Asia/Sakhalin", + "Asia/Ust-Nera", + "Asia/Magadan", + "Asia/Kamchatka", + "Asia/Anadyr" + ] + }, + { + "RW": [ + "Africa/Kigali" + ] + }, + { + "SA": [ + "Asia/Riyadh" + ] + }, + { + "SB": [ + "Pacific/Guadalcanal" + ] + }, + { + "SC": [ + "Indian/Mahe" + ] + }, + { + "SD": [ + "Africa/Khartoum" + ] + }, + { + "SE": [ + "Europe/Stockholm" + ] + }, + { + "SG": [ + "Asia/Singapore" + ] + }, + { + "SH": [ + "Atlantic/St_Helena" + ] + }, + { + "SI": [ + "Europe/Ljubljana" + ] + }, + { + "SJ": [ + "Arctic/Longyearbyen" + ] + }, + { + "SK": [ + "Europe/Bratislava" + ] + }, + { + "SL": [ + "Africa/Freetown" + ] + }, + { + "SM": [ + "Europe/San_Marino" + ] + }, + { + "SN": [ + "Africa/Dakar" + ] + }, + { + "SO": [ + "Africa/Mogadishu" + ] + }, + { + "SR": [ + "America/Paramaribo" + ] + }, + { + "SS": [ + "Africa/Juba" + ] + }, + { + "ST": [ + "Africa/Sao_Tome" + ] + }, + { + "SV": [ + "America/El_Salvador" + ] + }, + { + "SX": [ + "America/Lower_Princes" + ] + }, + { + "SY": [ + "Asia/Damascus" + ] + }, + { + "SZ": [ + "Africa/Mbabane" + ] + }, + { + "TC": [ + "America/Grand_Turk" + ] + }, + { + "TD": [ + "Africa/Ndjamena" + ] + }, + { + "TF": [ + "Indian/Kerguelen" + ] + }, + { + "TG": [ + "Africa/Lome" + ] + }, + { + "TH": [ + "Asia/Bangkok" + ] + }, + { + "TJ": [ + "Asia/Dushanbe" + ] + }, + { + "TK": [ + "Pacific/Fakaofo" + ] + }, + { + "TL": [ + "Asia/Dili" + ] + }, + { + "TM": [ + "Asia/Ashgabat" + ] + }, + { + "TN": [ + "Africa/Tunis" + ] + }, + { + "TO": [ + "Pacific/Tongatapu" + ] + }, + { + "TR": [ + "Europe/Istanbul" + ] + }, + { + "TT": [ + "America/Port_of_Spain" + ] + }, + { + "TV": [ + "Pacific/Funafuti" + ] + }, + { + "TW": [ + "Asia/Taipei" + ] + }, + { + "TZ": [ + "Africa/Dar_es_Salaam" + ] + }, + { + "UA": [ + "Europe/Kiev", + "Europe/Uzhgorod", + "Europe/Zaporozhye", + "Europe/Simferopol" + ] + }, + { + "UG": [ + "Africa/Kampala" + ] + }, + { + "UM": [ + "Pacific/Johnston", + "Pacific/Midway", + "Pacific/Wake" + ] + }, + { + "US": [ + "America/New_York", + "America/Detroit", + "America/Kentucky/Louisville", + "America/Kentucky/Monticello", + "America/Indiana/Indianapolis", + "America/Indiana/Vincennes", + "America/Indiana/Winamac", + "America/Indiana/Marengo", + "America/Indiana/Petersburg", + "America/Indiana/Vevay", + "America/Chicago", + "America/Indiana/Tell_City", + "America/Indiana/Knox", + "America/Menominee", + "America/North_Dakota/Center", + "America/North_Dakota/New_Salem", + "America/North_Dakota/Beulah", + "America/Denver", + "America/Boise", + "America/Phoenix", + "America/Los_Angeles", + "America/Anchorage", + "America/Juneau", + "America/Sitka", + "America/Yakutat", + "America/Nome", + "America/Adak", + "America/Metlakatla", + "Pacific/Honolulu" + ] + }, + { + "UY": [ + "America/Montevideo" + ] + }, + { + "UZ": [ + "Asia/Samarkand", + "Asia/Tashkent" + ] + }, + { + "VA": [ + "Europe/Vatican" + ] + }, + { + "VC": [ + "America/St_Vincent" + ] + }, + { + "VE": [ + "America/Caracas" + ] + }, + { + "VG": [ + "America/Tortola" + ] + }, + { + "VI": [ + "America/St_Thomas" + ] + }, + { + "VN": [ + "Asia/Ho_Chi_Minh" + ] + }, + { + "VU": [ + "Pacific/Efate" + ] + }, + { + "WF": [ + "Pacific/Wallis" + ] + }, + { + "WS": [ + "Pacific/Apia" + ] + }, + { + "YE": [ + "Asia/Aden" + ] + }, + { + "YT": [ + "Indian/Mayotte" + ] + }, + { + "ZA": [ + "Africa/Johannesburg" + ] + }, + { + "ZM": [ + "Africa/Lusaka" + ] + }, + { + "ZW": [ + "Africa/Harare" + ] + } +] \ No newline at end of file