Skip to content

Instantly share code, notes, and snippets.

@twolfson
Last active February 11, 2020 03:11
Show Gist options
  • Save twolfson/06fe0872ce9e8dfb0d522aa2dedfc5c2 to your computer and use it in GitHub Desktop.
Save twolfson/06fe0872ce9e8dfb0d522aa2dedfc5c2 to your computer and use it in GitHub Desktop.
Proof of concept to explore timezones in PostgreSQL and between server/browser
node_modules/
.vagrant/

gist-timezone-poc

Proof of concept to explore timezones in PostgreSQL and between server/browser

We are building a product which requires deep timezone integration. This can get complicated and frustrating if not done properly (and even worse to repair).

To make sure we get it right the first time (or damn close), we are making this proof of concept.

Features:

  • PostgreSQL database using TIMESTAMP WITH TIMEZONE
  • Express server
  • Some front-end UI for selecting timezones from a long list (preferrably given to us by moment-timezone)

Tasks:

We have stopped working on this early since we have concluded what our final result will be:

  • 2 separate fields in the HTML document; 1 for datetime, 1 for timezone
  • Server will create a moment instance using both datetime and timezone
  • Database will save datetime with timezone offset as UTC and timezone itself as 2 separate columns
    • We must use 2 columns since timezones cannot be preserved by PostgreSQL as it stores everything in UTC
  • On retrieval from database, we will create a moment instance using both datetime and timezone

Notes can be found below


  • List timezones in human friendly terms (e.g. "(GMT-05:00) United States/Eastern Time")
    • See Google Calendar for good interaction
      • Their <select> uses <option value="America/Chicago">(GMT-05:00) Central Time</option> so we are prob safe with the same
      • We have generated this list based off of Google Calendar data and placed it in tz-locales. The keys are country codes
        • The file is 4.00 kb gzipped which is plenty small =)
      • Extract country codes conversion
        • Be sure to only list country codes that are bijective, no need for unnecessary data
    • In final product, be sure to adjust timezone listing based on target date
  • Serializing/sending datetime + timezone from browser to server
  • Deserializing/receiving datetime + timezone on server
  • Saving datetime + timezone in PostgreSQL
  • Verify timezone is persisted properly in PostgeSQL (verify via CLI)
    • Find replacement (likely 2 columns)
  • Extracting saved timezone from PostgreSQL into variable like moment
  • Rendering serialized datetime from server to browser

Documentation

Human friendly timezones

We have set up human friendly timezones via google-calendar-tz.json, cleanup-google-calendar-tz.js, and tz-locales.json

To refresh the data for tz-locales.json (final result), perform the following steps:

  1. Go to Google Calendar
  2. Open "Create" page for a new event
  3. Open "Network" tab in developer tools
  4. Click "Timezone"
  5. Download "POST https://calendar.google.com/calendar/fetchTZ" response body to google-calendar-tz.json
  6. Run npm run generate-locales

Country codes

We have set up human friendly timezones via google-calendar-countries.json, cleanup-google-calendar-countries.js, and country-codes.json

To refresh the data for country-codes.json (final result), perform the following steps:

  1. Go to Google Calendar
  2. Open "Create" page for a new event
  3. Click "Timezone"
  4. Inspect the "Countries" element
  5. Download $0.outerHTML to google-calendar-countries.html
  6. Run npm run generate-country-codes

Database exploration

In reset-db.sh and reset-db.sql, we explored how PostgreSQL handles timezones. Unfortunately, the conclusion was it coerces/saves timezones as UTC and cannot be restored.

For ease of use, we added a Vagrantfile and bootstrap.sh which can be used via vagrant up; vagrant ssh; cd /vagrant; ./reset-db.sh.

#!/usr/bin/env bash
# Exit on first error
set -e
# Update apt-get
if ! test -f .updated_apt_get; then
sudo apt-get update
touch .updated_apt_get
fi
# Install PostgreSQL
if ! dpkg --list | grep postgresql-9.3 &> /dev/null; then
sudo apt-get install -y postgresql-9.3
fi
# Set up PostgreSQL users
# https://gist.github.com/twolfson/9cf0ae454be269f45af8
# If we can't open `psql` as `vagrant`
echo_command="psql --db postgres --command \"SELECT 'hai';\""
if ! sudo su vagrant --command "$echo_command" &> /dev/null; then
# Set up `vagrant` user in PostgreSQL
create_user_command="psql --command \"CREATE ROLE vagrant WITH SUPERUSER CREATEDB LOGIN;\""
sudo su postgres --command "$create_user_command"
set_user_password="psql --command \"ALTER ROLE vagrant WITH PASSWORD 'vagrant';\""
sudo su postgres --command "$set_user_password"
fi
// Load in our dependencies
// DEV: Retrieved via HTML content on https://calendar.google.com/ create -> "Time Zone"
var assert = require('assert');
var fs = require('fs');
var googleCalendarCountriesHtml = fs.readFileSync('./google-calendar-countries.html', 'utf8');
var cheerio = require('cheerio');
// Parse our HTML
var $ = cheerio.load(googleCalendarCountriesHtml);
// For each of our option nodes, output their country code to name mapping
var countryCodeMap = {};
$('option').each(function handleNode () {
// Verify the country code is unique
var $el = $(this);
var countryCode = $el.val();
assert(countryCode && countryCodeMap[countryCode] === undefined);
// Save our country code
countryCodeMap[countryCode] = $el.text();
});
// Export our country code map
module.exports = countryCodeMap;
// If this program is running standalone, then log to stdout
if (module.parent === null) {
console.log(JSON.stringify(countryCodeMap, null, 2));
}
// Load in our dependencies
// DEV: Retrieved via POST https://calendar.google.com/calendar/fetchTZ (see "Net" panel when clicking "Time Zone")
// DEV: We need to use `eval` since they are using single quotes
var assert = require('assert');
var fs = require('fs');
var googleCalendarCountries = require('./cleanup-google-calendar-countries.js');
// jshint ignore:start
var googleCalendarTz = eval(fs.readFileSync('./google-calendar-tz.json', 'utf8'));
// jshint ignore:end
// Convert everything to objects
// ['AD' (country code), ['Europe/Andorra' (IANA timezone),'(GMT+02:00) Andorra' (human name), 'packed data', ...], ...]
var timezones = {};
var countryCode;
assert(googleCalendarTz.length % 2 === 0);
googleCalendarTz.forEach(function handleData (item, i) {
// If we are on an even item, then verify it's a country code
if (i % 2 === 0) {
assert(typeof item === 'string');
assert(item.length === 2);
countryCode = item;
// Otherwise (odd item), we have data for said country code
} else {
// ['Europe/Andorra' (IANA timezone),'(GMT+02:00) Andorra' (human name), 'packed data', ...]
var countryData = item;
assert(countryData.length % 3 === 0);
var locales = {};
var localeIANA;
countryData.forEach(function handleCountryData (item, i) {
// If we are on the first item (IANA timezone), save it
if (i % 3 === 0) {
localeIANA = item;
// If we are on the second item (human name), save it
} else if (i % 3 === 1) {
var localeName = item;
locales[localeIANA] = localeName;
// Otherwise (packed data), skip it
} else {
// Do nothing
}
});
// Save our locales under the country code
assert(timezones[countryCode] === undefined);
timezones[countryCode] = locales;
}
});
// For each of the timezones
Object.keys(timezones).forEach(function forEachTimezone (countryCode) {
// If the country isn't listed by Google, then remove it
if (googleCalendarCountries[countryCode] === undefined) {
console.error('Country not recognized "' + countryCode + '". Removing it');
delete timezones[countryCode];
}
});
// Output our data
console.log(JSON.stringify(timezones, null, 2));
{
"AF": "Afghanistan (‫افغانستان‬‎)",
"AX": "Åland Islands (Åland)",
"AL": "Albania (Shqipëri)",
"DZ": "Algeria",
"AS": "American Samoa",
"AD": "Andorra",
"AO": "Angola",
"AI": "Anguilla",
"AQ": "Antarctica",
"AG": "Antigua & Barbuda",
"AR": "Argentina",
"AM": "Armenia (Հայաստան)",
"AW": "Aruba",
"AU": "Australia",
"AT": "Austria (Österreich)",
"AZ": "Azerbaijan (Azərbaycan)",
"BS": "Bahamas",
"BH": "Bahrain (‫البحرين‬‎)",
"BD": "Bangladesh (বাংলাদেশ)",
"BB": "Barbados",
"BY": "Belarus (Беларусь)",
"BE": "Belgium",
"BZ": "Belize",
"BJ": "Benin (Bénin)",
"BM": "Bermuda",
"BT": "Bhutan (འབྲུག)",
"BO": "Bolivia",
"BA": "Bosnia & Herzegovina (Босна и Херцеговина)",
"BW": "Botswana",
"BV": "Bouvet Island",
"BR": "Brazil (Brasil)",
"IO": "British Indian Ocean Territory",
"VG": "British Virgin Islands",
"BN": "Brunei",
"BG": "Bulgaria (България)",
"BF": "Burkina Faso",
"BI": "Burundi (Uburundi)",
"KH": "Cambodia (កម្ពុជា)",
"CM": "Cameroon (Cameroun)",
"CA": "Canada",
"CV": "Cape Verde (Kabu Verdi)",
"BQ": "Caribbean Netherlands",
"KY": "Cayman Islands",
"CF": "Central African Republic (République centrafricaine)",
"TD": "Chad (Tchad)",
"CL": "Chile",
"CN": "China (中国)",
"CX": "Christmas Island",
"CC": "Cocos (Keeling) Islands (Kepulauan Cocos (Keeling))",
"CO": "Colombia",
"KM": "Comoros (‫جزر القمر‬‎)",
"CD": "Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)",
"CG": "Congo (Republic) (Congo-Brazzaville)",
"CK": "Cook Islands",
"CR": "Costa Rica",
"CI": "Côte d’Ivoire",
"HR": "Croatia (Hrvatska)",
"CU": "Cuba",
"CW": "Curaçao",
"CY": "Cyprus (Κύπρος)",
"CZ": "Czech Republic (Česká republika)",
"DK": "Denmark (Danmark)",
"DJ": "Djibouti",
"DM": "Dominica",
"DO": "Dominican Republic (República Dominicana)",
"EC": "Ecuador",
"EG": "Egypt (‫مصر‬‎)",
"SV": "El Salvador",
"GQ": "Equatorial Guinea (Guinea Ecuatorial)",
"ER": "Eritrea",
"EE": "Estonia (Eesti)",
"ET": "Ethiopia",
"FK": "Falkland Islands (Islas Malvinas)",
"FO": "Faroe Islands (Føroyar)",
"FJ": "Fiji",
"FI": "Finland (Suomi)",
"FR": "France",
"GF": "French Guiana (Guyane française)",
"PF": "French Polynesia (Polynésie française)",
"TF": "French Southern Territories (Terres australes françaises)",
"GA": "Gabon",
"GM": "Gambia",
"GE": "Georgia (საქართველო)",
"DE": "Germany (Deutschland)",
"GH": "Ghana (Gaana)",
"GI": "Gibraltar",
"GR": "Greece (Ελλάδα)",
"GL": "Greenland (Kalaallit Nunaat)",
"GD": "Grenada",
"GP": "Guadeloupe",
"GU": "Guam",
"GT": "Guatemala",
"GG": "Guernsey",
"GN": "Guinea (Guinée)",
"GW": "Guinea-Bissau (Guiné-Bissau)",
"GY": "Guyana",
"HT": "Haiti",
"HM": "Heard & McDonald Islands",
"HN": "Honduras",
"HK": "Hong Kong (香港)",
"HU": "Hungary (Magyarország)",
"IS": "Iceland (Ísland)",
"IN": "India (भारत)",
"ID": "Indonesia",
"IR": "Iran (‫ایران‬‎)",
"IQ": "Iraq (‫العراق‬‎)",
"IE": "Ireland",
"IM": "Isle of Man",
"IL": "Israel (‫ישראל‬‎)",
"IT": "Italy (Italia)",
"JM": "Jamaica",
"JP": "Japan (日本)",
"JE": "Jersey",
"JO": "Jordan (‫الأردن‬‎)",
"KZ": "Kazakhstan (Казахстан)",
"KE": "Kenya",
"KI": "Kiribati",
"KW": "Kuwait (‫الكويت‬‎)",
"KG": "Kyrgyzstan (Кыргызстан)",
"LA": "Laos (ລາວ)",
"LV": "Latvia (Latvija)",
"LB": "Lebanon (‫لبنان‬‎)",
"LS": "Lesotho",
"LR": "Liberia",
"LY": "Libya (‫ليبيا‬‎)",
"LI": "Liechtenstein",
"LT": "Lithuania (Lietuva)",
"LU": "Luxembourg",
"MO": "Macau (澳門)",
"MK": "Macedonia (FYROM) (Македонија)",
"MG": "Madagascar (Madagasikara)",
"MW": "Malawi",
"MY": "Malaysia",
"MV": "Maldives",
"ML": "Mali",
"MT": "Malta",
"MH": "Marshall Islands",
"MQ": "Martinique",
"MR": "Mauritania (‫موريتانيا‬‎)",
"MU": "Mauritius (Moris)",
"YT": "Mayotte",
"MX": "Mexico (México)",
"FM": "Micronesia",
"MD": "Moldova (Republica Moldova)",
"MC": "Monaco",
"MN": "Mongolia (Монгол)",
"ME": "Montenegro (Crna Gora)",
"MS": "Montserrat",
"MA": "Morocco",
"MZ": "Mozambique (Moçambique)",
"MM": "Myanmar (Burma) (မြန်မာ)",
"NA": "Namibia (Namibië)",
"NR": "Nauru",
"NP": "Nepal (नेपाल)",
"NL": "Netherlands (Nederland)",
"NC": "New Caledonia (Nouvelle-Calédonie)",
"NZ": "New Zealand",
"NI": "Nicaragua",
"NE": "Niger (Nijar)",
"NG": "Nigeria",
"NU": "Niue",
"NF": "Norfolk Island",
"MP": "Northern Mariana Islands",
"KP": "North Korea (조선민주주의인민공화국)",
"NO": "Norway (Norge)",
"OM": "Oman (‫عُمان‬‎)",
"PK": "Pakistan (‫پاکستان‬‎)",
"PW": "Palau",
"PS": "Palestine (‫فلسطين‬‎)",
"PA": "Panama (Panamá)",
"PG": "Papua New Guinea",
"PY": "Paraguay",
"PE": "Peru (Perú)",
"PH": "Philippines",
"PN": "Pitcairn Islands",
"PL": "Poland (Polska)",
"PT": "Portugal",
"PR": "Puerto Rico",
"QA": "Qatar (‫قطر‬‎)",
"RE": "Réunion (La Réunion)",
"RO": "Romania (România)",
"RU": "Russia (Россия)",
"RW": "Rwanda",
"WS": "Samoa",
"SM": "San Marino",
"ST": "São Tomé & Príncipe (São Tomé e Príncipe)",
"SA": "Saudi Arabia (‫المملكة العربية السعودية‬‎)",
"SN": "Senegal",
"RS": "Serbia (Србија)",
"SC": "Seychelles",
"SL": "Sierra Leone",
"SG": "Singapore",
"SX": "Sint Maarten",
"SK": "Slovakia (Slovensko)",
"SI": "Slovenia (Slovenija)",
"SB": "Solomon Islands",
"SO": "Somalia (Soomaaliya)",
"ZA": "South Africa",
"GS": "South Georgia & South Sandwich Islands",
"KR": "South Korea (대한민국)",
"SS": "South Sudan (‫جنوب السودان‬‎)",
"ES": "Spain (España)",
"LK": "Sri Lanka (ශ්‍රී ලංකාව)",
"SH": "St. Helena",
"KN": "St. Kitts & Nevis",
"LC": "St. Lucia",
"MF": "St. Martin (Saint-Martin)",
"PM": "St. Pierre & Miquelon (Saint-Pierre-et-Miquelon)",
"VC": "St. Vincent & Grenadines",
"SD": "Sudan (‫السودان‬‎)",
"SR": "Suriname",
"SJ": "Svalbard & Jan Mayen (Svalbard og Jan Mayen)",
"SZ": "Swaziland",
"SE": "Sweden (Sverige)",
"CH": "Switzerland (Schweiz)",
"SY": "Syria (‫سوريا‬‎)",
"TW": "Taiwan (台灣)",
"TJ": "Tajikistan",
"TZ": "Tanzania",
"TH": "Thailand (ไทย)",
"TL": "Timor-Leste",
"TG": "Togo",
"TK": "Tokelau",
"TO": "Tonga",
"TT": "Trinidad & Tobago",
"TN": "Tunisia",
"TR": "Turkey (Türkiye)",
"TM": "Turkmenistan",
"TC": "Turks & Caicos Islands",
"TV": "Tuvalu",
"UM": "U.S. Outlying Islands",
"VI": "U.S. Virgin Islands",
"UG": "Uganda",
"UA": "Ukraine (Україна)",
"AE": "United Arab Emirates (‫الإمارات العربية المتحدة‬‎)",
"GB": "United Kingdom",
"US": "United States",
"UY": "Uruguay",
"UZ": "Uzbekistan (Oʻzbekiston)",
"VU": "Vanuatu",
"VA": "Vatican City (Città del Vaticano)",
"VE": "Venezuela",
"VN": "Vietnam (Việt Nam)",
"WF": "Wallis & Futuna",
"EH": "Western Sahara (‫الصحراء الغربية‬‎)",
"YE": "Yemen (‫اليمن‬‎)",
"ZM": "Zambia",
"ZW": "Zimbabwe"
}
// Load in our dependencies
var moment = require('moment-timezone');
// Output select timezone info
// https://github.com/moment/moment-timezone/blob/0.5.3/index.js#L2
// https://github.com/moment/moment-timezone/blob/0.5.3/moment-timezone.js#L450-L454
// https://github.com/moment/moment-timezone/blob/0.5.3/moment-timezone.js#L371-L388
// https://github.com/moment/moment-timezone/blob/0.5.3/moment-timezone.js#L495-L497
// DEV: _zones = [{computer_name: 'America/Chicago|other|packed|data'}]
console.log(moment.tz._zones.america_chicago);
console.log(Object.keys(moment.tz.zone('america_chicago')));
<select class="tz-pck-country"><option value="AF">Afghanistan (‫افغانستان‬&lrm;)</option><option value="AX">Åland Islands (Åland)</option><option value="AL">Albania (Shqipëri)</option><option value="DZ">Algeria</option><option value="AS">American Samoa</option><option value="AD">Andorra</option><option value="AO">Angola</option><option value="AI">Anguilla</option><option value="AQ">Antarctica</option><option value="AG">Antigua &amp; Barbuda</option><option value="AR">Argentina</option><option value="AM">Armenia (Հայաստան)</option><option value="AW">Aruba</option><option value="AU">Australia</option><option value="AT">Austria (Österreich)</option><option value="AZ">Azerbaijan (Azərbaycan)</option><option value="BS">Bahamas</option><option value="BH">Bahrain (‫البحرين‬&lrm;)</option><option value="BD">Bangladesh (বাংলাদেশ)</option><option value="BB">Barbados</option><option value="BY">Belarus (Беларусь)</option><option value="BE">Belgium</option><option value="BZ">Belize</option><option value="BJ">Benin (Bénin)</option><option value="BM">Bermuda</option><option value="BT">Bhutan (འབྲུག)</option><option value="BO">Bolivia</option><option value="BA">Bosnia &amp; Herzegovina (Босна и Херцеговина)</option><option value="BW">Botswana</option><option value="BV">Bouvet Island</option><option value="BR">Brazil (Brasil)</option><option value="IO">British Indian Ocean Territory</option><option value="VG">British Virgin Islands</option><option value="BN">Brunei</option><option value="BG">Bulgaria (България)</option><option value="BF">Burkina Faso</option><option value="BI">Burundi (Uburundi)</option><option value="KH">Cambodia (កម្ពុជា)</option><option value="CM">Cameroon (Cameroun)</option><option value="CA">Canada</option><option value="CV">Cape Verde (Kabu Verdi)</option><option value="BQ">Caribbean Netherlands</option><option value="KY">Cayman Islands</option><option value="CF">Central African Republic (République centrafricaine)</option><option value="TD">Chad (Tchad)</option><option value="CL">Chile</option><option value="CN">China (中国)</option><option value="CX">Christmas Island</option><option value="CC">Cocos (Keeling) Islands (Kepulauan Cocos (Keeling))</option><option value="CO">Colombia</option><option value="KM">Comoros (‫جزر القمر‬&lrm;)</option><option value="CD">Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)</option><option value="CG">Congo (Republic) (Congo-Brazzaville)</option><option value="CK">Cook Islands</option><option value="CR">Costa Rica</option><option value="CI">Côte d’Ivoire</option><option value="HR">Croatia (Hrvatska)</option><option value="CU">Cuba</option><option value="CW">Curaçao</option><option value="CY">Cyprus (Κύπρος)</option><option value="CZ">Czech Republic (Česká republika)</option><option value="DK">Denmark (Danmark)</option><option value="DJ">Djibouti</option><option value="DM">Dominica</option><option value="DO">Dominican Republic (República Dominicana)</option><option value="EC">Ecuador</option><option value="EG">Egypt (‫مصر‬&lrm;)</option><option value="SV">El Salvador</option><option value="GQ">Equatorial Guinea (Guinea Ecuatorial)</option><option value="ER">Eritrea</option><option value="EE">Estonia (Eesti)</option><option value="ET">Ethiopia</option><option value="FK">Falkland Islands (Islas Malvinas)</option><option value="FO">Faroe Islands (Føroyar)</option><option value="FJ">Fiji</option><option value="FI">Finland (Suomi)</option><option value="FR">France</option><option value="GF">French Guiana (Guyane française)</option><option value="PF">French Polynesia (Polynésie française)</option><option value="TF">French Southern Territories (Terres australes françaises)</option><option value="GA">Gabon</option><option value="GM">Gambia</option><option value="GE">Georgia (საქართველო)</option><option value="DE">Germany (Deutschland)</option><option value="GH">Ghana (Gaana)</option><option value="GI">Gibraltar</option><option value="GR">Greece (Ελλάδα)</option><option value="GL">Greenland (Kalaallit Nunaat)</option><option value="GD">Grenada</option><option value="GP">Guadeloupe</option><option value="GU">Guam</option><option value="GT">Guatemala</option><option value="GG">Guernsey</option><option value="GN">Guinea (Guinée)</option><option value="GW">Guinea-Bissau (Guiné-Bissau)</option><option value="GY">Guyana</option><option value="HT">Haiti</option><option value="HM">Heard &amp; McDonald Islands</option><option value="HN">Honduras</option><option value="HK">Hong Kong (香港)</option><option value="HU">Hungary (Magyarország)</option><option value="IS">Iceland (Ísland)</option><option value="IN">India (भारत)</option><option value="ID">Indonesia</option><option value="IR">Iran (‫ایران‬&lrm;)</option><option value="IQ">Iraq (‫العراق‬&lrm;)</option><option value="IE">Ireland</option><option value="IM">Isle of Man</option><option value="IL">Israel (‫ישראל‬&lrm;)</option><option value="IT">Italy (Italia)</option><option value="JM">Jamaica</option><option value="JP">Japan (日本)</option><option value="JE">Jersey</option><option value="JO">Jordan (‫الأردن‬&lrm;)</option><option value="KZ">Kazakhstan (Казахстан)</option><option value="KE">Kenya</option><option value="KI">Kiribati</option><option value="KW">Kuwait (‫الكويت‬&lrm;)</option><option value="KG">Kyrgyzstan (Кыргызстан)</option><option value="LA">Laos (ລາວ)</option><option value="LV">Latvia (Latvija)</option><option value="LB">Lebanon (‫لبنان‬&lrm;)</option><option value="LS">Lesotho</option><option value="LR">Liberia</option><option value="LY">Libya (‫ليبيا‬&lrm;)</option><option value="LI">Liechtenstein</option><option value="LT">Lithuania (Lietuva)</option><option value="LU">Luxembourg</option><option value="MO">Macau (澳門)</option><option value="MK">Macedonia (FYROM) (Македонија)</option><option value="MG">Madagascar (Madagasikara)</option><option value="MW">Malawi</option><option value="MY">Malaysia</option><option value="MV">Maldives</option><option value="ML">Mali</option><option value="MT">Malta</option><option value="MH">Marshall Islands</option><option value="MQ">Martinique</option><option value="MR">Mauritania (‫موريتانيا‬&lrm;)</option><option value="MU">Mauritius (Moris)</option><option value="YT">Mayotte</option><option value="MX">Mexico (México)</option><option value="FM">Micronesia</option><option value="MD">Moldova (Republica Moldova)</option><option value="MC">Monaco</option><option value="MN">Mongolia (Монгол)</option><option value="ME">Montenegro (Crna Gora)</option><option value="MS">Montserrat</option><option value="MA">Morocco</option><option value="MZ">Mozambique (Moçambique)</option><option value="MM">Myanmar (Burma) (မြန်မာ)</option><option value="NA">Namibia (Namibië)</option><option value="NR">Nauru</option><option value="NP">Nepal (नेपाल)</option><option value="NL">Netherlands (Nederland)</option><option value="NC">New Caledonia (Nouvelle-Calédonie)</option><option value="NZ">New Zealand</option><option value="NI">Nicaragua</option><option value="NE">Niger (Nijar)</option><option value="NG">Nigeria</option><option value="NU">Niue</option><option value="NF">Norfolk Island</option><option value="MP">Northern Mariana Islands</option><option value="KP">North Korea (조선민주주의인민공화국)</option><option value="NO">Norway (Norge)</option><option value="OM">Oman (‫عُمان‬&lrm;)</option><option value="PK">Pakistan (‫پاکستان‬&lrm;)</option><option value="PW">Palau</option><option value="PS">Palestine (‫فلسطين‬&lrm;)</option><option value="PA">Panama (Panamá)</option><option value="PG">Papua New Guinea</option><option value="PY">Paraguay</option><option value="PE">Peru (Perú)</option><option value="PH">Philippines</option><option value="PN">Pitcairn Islands</option><option value="PL">Poland (Polska)</option><option value="PT">Portugal</option><option value="PR">Puerto Rico</option><option value="QA">Qatar (‫قطر‬&lrm;)</option><option value="RE">Réunion (La Réunion)</option><option value="RO">Romania (România)</option><option value="RU">Russia (Россия)</option><option value="RW">Rwanda</option><option value="WS">Samoa</option><option value="SM">San Marino</option><option value="ST">São Tomé &amp; Príncipe (São Tomé e Príncipe)</option><option value="SA">Saudi Arabia (‫المملكة العربية السعودية‬&lrm;)</option><option value="SN">Senegal</option><option value="RS">Serbia (Србија)</option><option value="SC">Seychelles</option><option value="SL">Sierra Leone</option><option value="SG">Singapore</option><option value="SX">Sint Maarten</option><option value="SK">Slovakia (Slovensko)</option><option value="SI">Slovenia (Slovenija)</option><option value="SB">Solomon Islands</option><option value="SO">Somalia (Soomaaliya)</option><option value="ZA">South Africa</option><option value="GS">South Georgia &amp; South Sandwich Islands</option><option value="KR">South Korea (대한민국)</option><option value="SS">South Sudan (‫جنوب السودان‬&lrm;)</option><option value="ES">Spain (España)</option><option value="LK">Sri Lanka (ශ්&zwj;රී ලංකාව)</option><option value="SH">St. Helena</option><option value="KN">St. Kitts &amp; Nevis</option><option value="LC">St. Lucia</option><option value="MF">St. Martin (Saint-Martin)</option><option value="PM">St. Pierre &amp; Miquelon (Saint-Pierre-et-Miquelon)</option><option value="VC">St. Vincent &amp; Grenadines</option><option value="SD">Sudan (‫السودان‬&lrm;)</option><option value="SR">Suriname</option><option value="SJ">Svalbard &amp; Jan Mayen (Svalbard og Jan Mayen)</option><option value="SZ">Swaziland</option><option value="SE">Sweden (Sverige)</option><option value="CH">Switzerland (Schweiz)</option><option value="SY">Syria (‫سوريا‬&lrm;)</option><option value="TW">Taiwan (台灣)</option><option value="TJ">Tajikistan</option><option value="TZ">Tanzania</option><option value="TH">Thailand (ไทย)</option><option value="TL">Timor-Leste</option><option value="TG">Togo</option><option value="TK">Tokelau</option><option value="TO">Tonga</option><option value="TT">Trinidad &amp; Tobago</option><option value="TN">Tunisia</option><option value="TR">Turkey (Türkiye)</option><option value="TM">Turkmenistan</option><option value="TC">Turks &amp; Caicos Islands</option><option value="TV">Tuvalu</option><option value="UM">U.S. Outlying Islands</option><option value="VI">U.S. Virgin Islands</option><option value="UG">Uganda</option><option value="UA">Ukraine (Україна)</option><option value="AE">United Arab Emirates (‫الإمارات العربية المتحدة‬&lrm;)</option><option value="GB">United Kingdom</option><option value="US">United States</option><option value="UY">Uruguay</option><option value="UZ">Uzbekistan (Oʻzbekiston)</option><option value="VU">Vanuatu</option><option value="VA">Vatican City (Città del Vaticano)</option><option value="VE">Venezuela</option><option value="VN">Vietnam (Việt Nam)</option><option value="WF">Wallis &amp; Futuna</option><option value="EH">Western Sahara (‫الصحراء الغربية‬&lrm;)</option><option value="YE">Yemen (‫اليمن‬&lrm;)</option><option value="ZM">Zambia</option><option value="ZW">Zimbabwe</option></select>
['AD',['Europe/Andorra','(GMT+02:00) Andorra','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'AE',['Asia/Dubai','(GMT+04:00) Dubai','6o'],'AF',['Asia/Kabul','(GMT+04:30) Kabul','7i'],'AG',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'AI',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'AL',['Europe/Tirane','(GMT+02:00) Tirane','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'AM',['Asia/Yerevan','(GMT+04:00) Yerevan','6o'],'AN',['America/Curacao','(GMT-04:00) Curacao','-6o'],'AO',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'AQ',['Antarctica/Palmer','(GMT-03:00) Palmer','-50{dvlp0{-6o{dzpio{-50{eipx0{-6o{elj2o{-50{etyd0{-6o{ewrio{-50{f56t0{-6o{f7zyo{-50{fgf90{-6o{fj8eo{-50{frnp0{-6o{fuguo{-50','Antarctica/Rothera','(GMT-03:00) Rothera','-50','Antarctica/Syowa','(GMT+03:00) Syowa','50','Antarctica/Mawson','(GMT+05:00) Mawson','8c','Antarctica/Vostok','(GMT+06:00) Vostok','a0','Antarctica/Davis','(GMT+07:00) Davis','bo','Antarctica/Casey','(GMT+08:00) Casey','dc','Antarctica/DumontDUrville','(GMT+10:00) Dumont D\47Urville','go','Pacific/Auckland','(GMT+12:00) Auckland','lo{duxrc{k0{e0c7c{lo{e667c{k0{ebknc{lo{ehenc{k0{emt3c{lo{esn3c{k0{ey1jc{lo{f3vjc{k0{f9hrc{lo{ffbrc{k0{fkq7c{lo{fqk7c{k0{fvync{lo{g1snc{k0'],'AR',['America/Argentina/Buenos_Aires','(GMT-03:00) Buenos Aires','-50'],'AS',['Pacific/Pago_Pago','(GMT-11:00) Pago Pago','-ic'],'AT',['Europe/Vienna','(GMT+02:00) Vienna','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'AU',['Australia/Perth','(GMT+08:00) Western Time - Perth','dc','Australia/Adelaide','(GMT+09:30) Central Time - Adelaide','hi{duxvi{fu{e0k3i{hi{e66bi{fu{ebsji{hi{eheri{fu{en0zi{hi{esn7i{fu{ey9fi{hi{f3vni{fu{f9pni{hi{ffbvi{fu{fky3i{hi{fqkbi{fu{fw6ji{hi{g1sri{fu','Australia/Darwin','(GMT+09:30) Central Time - Darwin','fu','Australia/Brisbane','(GMT+10:00) Eastern Time - Brisbane','go','Australia/Hobart','(GMT+10:00) Eastern Time - Hobart','ic{duxuo{go{e0k2o{ic{e66ao{go{ebsio{ic{eheqo{go{en0yo{ic{esn6o{go{ey9eo{ic{f3vmo{go{f9pmo{ic{ffbuo{go{fky2o{ic{fqkao{go{fw6io{ic{g1sqo{go','Australia/Sydney','(GMT+10:00) Eastern Time - Melbourne, Sydney','ic{duxuo{go{e0k2o{ic{e66ao{go{ebsio{ic{eheqo{go{en0yo{ic{esn6o{go{ey9eo{ic{f3vmo{go{f9pmo{ic{ffbuo{go{fky2o{ic{fqkao{go{fw6io{ic{g1sqo{go'],'AW',['America/Curacao','(GMT-04:00) Curacao','-6o'],'AX',['Europe/Helsinki','(GMT+03:00) Helsinki','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'AZ',['Asia/Baku','(GMT+04:00) Baku','8c{e17s0{6o{e5yw0{8c{ecg80{6o'],'BA',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'BB',['America/Barbados','(GMT-04:00) Barbados','-6o'],'BD',['Asia/Dhaka','(GMT+06:00) Dhaka','a0'],'BE',['Europe/Brussels','(GMT+02:00) Brussels','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'BF',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'BG',['Europe/Sofia','(GMT+03:00) Sofia','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'BH',['Asia/Qatar','(GMT+03:00) Qatar','50'],'BI',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'BJ',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'BM',['Atlantic/Bermuda','(GMT-03:00) Bermuda','-50{e1fsc{-6o{e5bu0{-50{eco8c{-6o{egs20{-50{eo4gc{-6o{es0i0{-50{ezcwc{-6o{f38y0{-50{falcc{-6o{fehe0{-50{fltsc{-6o{fppu0{-50{fx28c{-6o{g1620{-50'],'BN',['Asia/Brunei','(GMT+08:00) Brunei','dc'],'BO',['America/La_Paz','(GMT-04:00) La Paz','-6o'],'BQ',['America/Curacao','(GMT-04:00) Curacao','-6o'],'BR',['America/Rio_Branco','(GMT-05:00) Rio Branco','-8c','America/Boa_Vista','(GMT-04:00) Boa Vista','-6o','America/Campo_Grande','(GMT-04:00) Campo Grande','-6o{e106o{-50{e4w50{-6o{ec8mo{-50{eg4l0{-6o{enh2o{-50{erd10{-6o{eypio{-50{f2lh0{-6o{fa5qo{-50{fdtx0{-6o{fle6o{-50{fp2d0{-6o{fwmmo{-50{g0il0{-6o','America/Cuiaba','(GMT-04:00) Cuiaba','-6o{e106o{-50{e4w50{-6o{ec8mo{-50{eg4l0{-6o{enh2o{-50{erd10{-6o{eypio{-50{f2lh0{-6o{fa5qo{-50{fdtx0{-6o{fle6o{-50{fp2d0{-6o{fwmmo{-50{g0il0{-6o','America/Manaus','(GMT-04:00) Manaus','-6o','America/Porto_Velho','(GMT-04:00) Porto Velho','-6o','America/Araguaina','(GMT-03:00) Araguaina','-50','America/Bahia','(GMT-03:00) Salvador','-50','America/Belem','(GMT-03:00) Belem','-50','America/Fortaleza','(GMT-03:00) Fortaleza','-50','America/Maceio','(GMT-03:00) Maceio','-50','America/Recife','(GMT-03:00) Recife','-50','America/Sao_Paulo','(GMT-03:00) Sao Paulo','-50{e1050{-3c{e4w3c{-50{ec8l0{-3c{eg4jc{-50{enh10{-3c{erczc{-50{eyph0{-3c{f2lfc{-50{fa5p0{-3c{fdtvc{-50{fle50{-3c{fp2bc{-50{fwml0{-3c{g0ijc{-50','America/Noronha','(GMT-02:00) Noronha','-3c'],'BS',['America/Nassau','(GMT-04:00) Nassau','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-8c{egs3o{-6o{eo4i0{-8c{es0jo{-6o{ezcy0{-8c{f38zo{-6o{fale0{-8c{fehfo{-6o{fltu0{-8c{fppvo{-6o{fx2a0{-8c{g163o{-6o'],'BT',['Asia/Thimphu','(GMT+06:00) Thimphu','a0'],'BV',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'BW',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'BY',['Europe/Minsk','(GMT+03:00) Minsk','50{e17oo{50'],'BZ',['America/Belize','(GMT-06:00) Belize','-a0'],'CA',['America/Vancouver','(GMT-07:00) Pacific Time - Vancouver','-bo{e1fz0{-dc{e5c0o{-bo{ecof0{-dc{egs8o{-bo{eo4n0{-dc{es0oo{-bo{ezd30{-dc{f394o{-bo{falj0{-dc{fehko{-bo{fltz0{-dc{fpq0o{-bo{fx2f0{-dc{g168o{-bo','America/Whitehorse','(GMT-07:00) Pacific Time - Whitehorse','-bo{e1fz0{-dc{e5c0o{-bo{ecof0{-dc{egs8o{-bo{eo4n0{-dc{es0oo{-bo{ezd30{-dc{f394o{-bo{falj0{-dc{fehko{-bo{fltz0{-dc{fpq0o{-bo{fx2f0{-dc{g168o{-bo','America/Dawson_Creek','(GMT-07:00) Mountain Time - Dawson Creek','-bo','America/Edmonton','(GMT-06:00) Mountain Time - Edmonton','-a0{e1fxc{-bo{e5bz0{-a0{ecodc{-bo{egs70{-a0{eo4lc{-bo{es0n0{-a0{ezd1c{-bo{f3930{-a0{falhc{-bo{fehj0{-a0{fltxc{-bo{fppz0{-a0{fx2dc{-bo{g1670{-a0','America/Yellowknife','(GMT-06:00) Mountain Time - Yellowknife','-a0{e1fxc{-bo{e5bz0{-a0{ecodc{-bo{egs70{-a0{eo4lc{-bo{es0n0{-a0{ezd1c{-bo{f3930{-a0{falhc{-bo{fehj0{-a0{fltxc{-bo{fppz0{-a0{fx2dc{-bo{g1670{-a0','America/Regina','(GMT-06:00) Central Time - Regina','-a0','America/Winnipeg','(GMT-05:00) Central Time - Winnipeg','-8c{e1fvo{-a0{e5bxc{-8c{ecobo{-a0{egs5c{-8c{eo4jo{-a0{es0lc{-8c{ezczo{-a0{f391c{-8c{falfo{-a0{fehhc{-8c{fltvo{-a0{fppxc{-8c{fx2bo{-a0{g165c{-8c','America/Iqaluit','(GMT-04:00) Eastern Time - Iqaluit','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-8c{egs3o{-6o{eo4i0{-8c{es0jo{-6o{ezcy0{-8c{f38zo{-6o{fale0{-8c{fehfo{-6o{fltu0{-8c{fppvo{-6o{fx2a0{-8c{g163o{-6o','America/Toronto','(GMT-04:00) Eastern Time - Toronto','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-8c{egs3o{-6o{eo4i0{-8c{es0jo{-6o{ezcy0{-8c{f38zo{-6o{fale0{-8c{fehfo{-6o{fltu0{-8c{fppvo{-6o{fx2a0{-8c{g163o{-6o','America/Halifax','(GMT-03:00) Atlantic Time - Halifax','-50{e1fsc{-6o{e5bu0{-50{eco8c{-6o{egs20{-50{eo4gc{-6o{es0i0{-50{ezcwc{-6o{f38y0{-50{falcc{-6o{fehe0{-50{fltsc{-6o{fppu0{-50{fx28c{-6o{g1620{-50','America/St_Johns','(GMT-02:30) Newfoundland Time - St. Johns','-46{e1fri{-5u{e5bt6{-46{eco7i{-5u{egs16{-46{eo4fi{-5u{es0h6{-46{ezcvi{-5u{f38x6{-46{falbi{-5u{fehd6{-46{fltri{-5u{fppt6{-46{fx27i{-5u{g1616{-46'],'CC',['Indian/Cocos','(GMT+06:30) Cocos','au'],'CD',['Africa/Lagos','(GMT+01:00) Lagos','1o','Africa/Maputo','(GMT+02:00) Maputo','3c'],'CF',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'CG',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'CH',['Europe/Zurich','(GMT+02:00) Zurich','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'CI',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'CK',['Pacific/Rarotonga','(GMT-10:00) Rarotonga','-go'],'CL',['Pacific/Easter','(GMT-05:00) Easter Island','-8c{dvlp0{-a0{dzpio{-8c{eipx0{-a0{elj2o{-8c{etyd0{-a0{ewrio{-8c{f56t0{-a0{f7zyo{-8c{fgf90{-a0{fj8eo{-8c{frnp0{-a0{fuguo{-8c','America/Santiago','(GMT-03:00) Santiago','-50{dvlp0{-6o{dzpio{-50{eipx0{-6o{elj2o{-50{etyd0{-6o{ewrio{-50{f56t0{-6o{f7zyo{-50{fgf90{-6o{fj8eo{-50{frnp0{-6o{fuguo{-50'],'CM',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'CN',['Asia/Shanghai','(GMT+08:00) China Time - Beijing','dc'],'CO',['America/Bogota','(GMT-05:00) Bogota','-8c'],'CR',['America/Costa_Rica','(GMT-06:00) Costa Rica','-a0'],'CS',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'CU',['America/Havana','(GMT-04:00) Havana','-6o{e1fsc{-8c{e5bsc{-6o{eco8c{-8c{egs0c{-6o{eo4gc{-8c{es0gc{-6o{ezcwc{-8c{f38wc{-6o{falcc{-8c{fehcc{-6o{fltsc{-8c{fppsc{-6o{fx28c{-8c{g160c{-6o'],'CV',['Atlantic/Cape_Verde','(GMT-01:00) Cape Verde','-1o'],'CW',['America/Curacao','(GMT-04:00) Curacao','-6o'],'CX',['Indian/Christmas','(GMT+07:00) Christmas','bo'],'CY',['Asia/Nicosia','(GMT+03:00) Nicosia','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'CZ',['Europe/Prague','(GMT+02:00) Central European Time - Prague','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'DE',['Europe/Berlin','(GMT+02:00) Berlin','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'DJ',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'DK',['Europe/Copenhagen','(GMT+02:00) Copenhagen','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'DM',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'DO',['America/Santo_Domingo','(GMT-04:00) Santo Domingo','-6o'],'DZ',['Africa/Algiers','(GMT+01:00) Algiers','1o'],'EC',['Pacific/Galapagos','(GMT-06:00) Galapagos','-a0','America/Guayaquil','(GMT-05:00) Guayaquil','-8c'],'EE',['Europe/Tallinn','(GMT+03:00) Tallinn','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'EG',['Africa/Cairo','(GMT+02:00) Cairo','3c{dw6ko{50{dxh70{3c{dyk4o{50{e0ab0{3c'],'EH',['Africa/El_Aaiun','(GMT+01:00) El Aaiun','1o{dxijc{0{dylfc{1o{e17vc{0{e5yzc{1o{e8cjc{0{e9ffc{1o{ecgbc{0{eh7fc{1o{ejd7c{0{ekg3c{1o{enwjc{0{esfvc{1o{eu63c{0{evgrc{1o{ez4zc{0{f3obc{1o{f56rc{0{f69nc{1o{fadfc{0{ff4jc{1o{fg7fc{0{fhabc{1o{fllvc{0{fqczc{1o{fr0bc{0{fs37c{1o{fwubc{0{g1lfc{1o'],'ER',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'ES',['Atlantic/Canary','(GMT+01:00) Canary Islands','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o','Africa/Ceuta','(GMT+02:00) Ceuta','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c','Europe/Madrid','(GMT+02:00) Madrid','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'ET',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'FI',['Europe/Helsinki','(GMT+03:00) Helsinki','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'FJ',['Pacific/Fiji','(GMT+12:00) Fiji','k0{e1f3c{lo{e3snc{k0{ecnjc{lo{ef13c{k0{eo3rc{lo{eq9jc{k0{ezc7c{lo{f1prc{k0{faknc{lo{fcy7c{k0{flt3c{lo{fo6nc{k0{fx1jc{lo{fzf3c{k0'],'FK',['Atlantic/Stanley','(GMT-03:00) Stanley','-50'],'FM',['Pacific/Chuuk','(GMT+10:00) Truk','go','Pacific/Kosrae','(GMT+11:00) Kosrae','ic','Pacific/Pohnpei','(GMT+11:00) Ponape','ic'],'FO',['Atlantic/Faroe','(GMT+01:00) Faeroe','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'FR',['Europe/Paris','(GMT+02:00) Paris','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'GA',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'GB',['Europe/London','(GMT+01:00) London','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'GD',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'GE',['Asia/Tbilisi','(GMT+04:00) Tbilisi','6o'],'GF',['America/Cayenne','(GMT-03:00) Cayenne','-50'],'GG',['Europe/London','(GMT+01:00) London','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'GH',['Africa/Accra','(GMT+00:00) Accra','0'],'GI',['Europe/Gibraltar','(GMT+02:00) Gibraltar','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'GL',['America/Thule','(GMT-03:00) Thule','-50{e1fsc{-6o{e5bu0{-50{eco8c{-6o{egs20{-50{eo4gc{-6o{es0i0{-50{ezcwc{-6o{f38y0{-50{falcc{-6o{fehe0{-50{fltsc{-6o{fppu0{-50{fx28c{-6o{g1620{-50','America/Godthab','(GMT-02:00) Godthab','-3c{e17to{-50{e5yxo{-3c{ecg9o{-50{eh7do{-3c{enwho{-50{esfto{-3c{ez4xo{-50{f3o9o{-3c{faddo{-50{ff4ho{-3c{fllto{-50{fqcxo{-3c{fwu9o{-50{g1ldo{-3c','America/Scoresbysund','(GMT+00:00) Scoresbysund','0{e17to{-1o{e5yxo{0{ecg9o{-1o{eh7do{0{enwho{-1o{esfto{0{ez4xo{-1o{f3o9o{0{faddo{-1o{ff4ho{0{fllto{-1o{fqcxo{0{fwu9o{-1o{g1ldo{0','America/Danmarkshavn','(GMT+00:00) Danmarkshavn','0'],'GM',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'GN',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'GP',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'GQ',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'GR',['Europe/Athens','(GMT+03:00) Athens','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'GS',['Atlantic/South_Georgia','(GMT-02:00) South Georgia','-3c'],'GT',['America/Guatemala','(GMT-06:00) Guatemala','-a0'],'GU',['Pacific/Guam','(GMT+10:00) Guam','go'],'GW',['Africa/Bissau','(GMT+00:00) Bissau','0'],'GY',['America/Guyana','(GMT-04:00) Guyana','-6o'],'HK',['Asia/Hong_Kong','(GMT+08:00) Hong Kong','dc'],'HM',['Indian/Kerguelen','(GMT+05:00) Kerguelen','8c'],'HN',['America/Tegucigalpa','(GMT-06:00) Central Time - Tegucigalpa','-a0'],'HR',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'HT',['America/Port-au-Prince','(GMT-05:00) Port-au-Prince','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-8c'],'HU',['Europe/Budapest','(GMT+02:00) Budapest','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'ID',['Asia/Jakarta','(GMT+07:00) Jakarta','bo','Asia/Makassar','(GMT+08:00) Makassar','dc','Asia/Jayapura','(GMT+09:00) Jayapura','f0'],'IE',['Europe/Dublin','(GMT+01:00) Dublin','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'IL',['Asia/Jerusalem','(GMT+03:00) Jerusalem','50{e17qc{3c{e5wo0{50{ecg6c{3c{eh540{50{enwec{3c{esdk0{50{ez4uc{3c{f3m00{50{fadac{3c{ff280{50{fllqc{3c{fqao0{50{fwu6c{3c{g1j40{50'],'IM',['Europe/London','(GMT+01:00) London','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'IN',['Asia/Calcutta','(GMT+05:30) India Standard Time','96'],'IO',['Indian/Chagos','(GMT+06:00) Chagos','a0'],'IQ',['Asia/Baghdad','(GMT+03:00) Baghdad','50'],'IR',['Asia/Tehran','(GMT+04:30) Tehran','7i{e05si{5u{e5qy6{7i{ebfci{5u{eh0i6{7i{emowi{5u{esb66{7i{exzki{5u{f3kq6{7i{f994i{5u{feua6{7i{fkioi{5u{fq3u6{7i{fvs8i{5u{g1ei6{7i'],'IS',['Atlantic/Reykjavik','(GMT+00:00) Reykjavik','0'],'IT',['Europe/Rome','(GMT+02:00) Rome','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'JE',['Europe/London','(GMT+01:00) London','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'JM',['America/Jamaica','(GMT-05:00) Jamaica','-8c'],'JO',['Asia/Amman','(GMT+03:00) Amman','50{e1d8o{3c{e5wko{50{ecloo{3c{ehcso{50{enu4o{3c{esl8o{50{ez2ko{3c{f3too{50{fab0o{3c{ff24o{50{fljgo{3c{fqako{50{fwzoo{3c{g1j0o{50'],'JP',['Asia/Tokyo','(GMT+09:00) Tokyo','f0'],'KE',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'KG',['Asia/Bishkek','(GMT+06:00) Bishkek','a0'],'KH',['Asia/Bangkok','(GMT+07:00) Bangkok','bo'],'KI',['Pacific/Tarawa','(GMT+12:00) Tarawa','k0','Pacific/Kiritimati','(GMT+14:00) Kiritimati','nc'],'KM',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'KN',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'KP',['Asia/Pyongyang','(GMT+08:30) Pyongyang','f0{ea8x0{e6'],'KR',['Asia/Seoul','(GMT+09:00) Seoul','f0'],'KW',['Asia/Riyadh','(GMT+03:00) Riyadh','50'],'KY',['America/Panama','(GMT-05:00) Panama','-8c'],'KZ',['Asia/Aqtau','(GMT+05:00) Aqtau','8c','Asia/Aqtobe','(GMT+05:00) Aqtobe','8c','Asia/Almaty','(GMT+06:00) Almaty','a0'],'LA',['Asia/Bangkok','(GMT+07:00) Bangkok','bo'],'LB',['Asia/Beirut','(GMT+03:00) Beirut','50{e17n0{3c{e5yso{50{ecg30{3c{eh78o{50{enwb0{3c{esfoo{50{ez4r0{3c{f3o4o{50{fad70{3c{ff4co{50{flln0{3c{fqcso{50{fwu30{3c{g1l8o{50'],'LC',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'LI',['Europe/Zurich','(GMT+02:00) Zurich','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'LK',['Asia/Colombo','(GMT+05:30) Colombo','96'],'LR',['Africa/Monrovia','(GMT+00:00) Monrovia','0'],'LS',['Africa/Johannesburg','(GMT+02:00) Johannesburg','3c'],'LT',['Europe/Vilnius','(GMT+03:00) Vilnius','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'LU',['Europe/Luxembourg','(GMT+02:00) Luxembourg','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'LV',['Europe/Riga','(GMT+03:00) Riga','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'LY',['Africa/Tripoli','(GMT+02:00) Tripoli','3c'],'MA',['Africa/Casablanca','(GMT+01:00) Casablanca','1o{dxijc{0{dylfc{1o{e17vc{0{e5yzc{1o{e8cjc{0{e9ffc{1o{ecgbc{0{eh7fc{1o{ejd7c{0{ekg3c{1o{enwjc{0{esfvc{1o{eu63c{0{evgrc{1o{ez4zc{0{f3obc{1o{f56rc{0{f69nc{1o{fadfc{0{ff4jc{1o{fg7fc{0{fhabc{1o{fllvc{0{fqczc{1o{fr0bc{0{fs37c{1o{fwubc{0{g1lfc{1o'],'MC',['Europe/Monaco','(GMT+02:00) Monaco','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'MD',['Europe/Chisinau','(GMT+03:00) Chisinau','50{e17s0{3c{e5yw0{50{ecg80{3c{eh7c0{50{enwg0{3c{esfs0{50{ez4w0{3c{f3o80{50{fadc0{3c{ff4g0{50{flls0{3c{fqcw0{50{fwu80{3c{g1lc0{50'],'ME',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'MF',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'MG',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'MH',['Pacific/Kwajalein','(GMT+12:00) Kwajalein','k0','Pacific/Majuro','(GMT+12:00) Majuro','k0'],'MK',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'ML',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'MM',['Asia/Rangoon','(GMT+06:30) Rangoon','au'],'MN',['Asia/Hovd','(GMT+08:00) Hovd','bo{e5xjo{dc{ebjmo{bo{eh5zo{dc{ems2o{bo{esefo{dc{ey8ao{bo{f3uno{dc{f9gqo{bo{ff33o{dc{fkp6o{bo{fqbjo{dc{fvxmo{bo{g1jzo{dc','Asia/Choibalsan','(GMT+09:00) Choibalsan','dc{e5xi0{f0{ebjl0{dc{eh5y0{f0{ems10{dc{esee0{f0{ey890{dc{f3um0{f0{f9gp0{dc{ff320{f0{fkp50{dc{fqbi0{f0{fvxl0{dc{g1jy0{f0','Asia/Ulaanbaatar','(GMT+09:00) Ulaanbaatar','dc{e5xi0{f0{ebjl0{dc{eh5y0{f0{ems10{dc{esee0{f0{ey890{dc{f3um0{f0{f9gp0{dc{ff320{f0{fkp50{dc{fqbi0{f0{fvxl0{dc{g1jy0{f0'],'MO',['Asia/Macau','(GMT+08:00) Macau','dc'],'MP',['Pacific/Guam','(GMT+10:00) Guam','go'],'MQ',['America/Martinique','(GMT-04:00) Martinique','-6o'],'MR',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'MS',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'MT',['Europe/Malta','(GMT+02:00) Malta','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'MU',['Indian/Mauritius','(GMT+04:00) Mauritius','6o'],'MV',['Indian/Maldives','(GMT+05:00) Maldives','8c'],'MW',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'MX',['America/Tijuana','(GMT-07:00) Pacific Time - Tijuana','-bo{e1fz0{-dc{e5c0o{-bo{ecof0{-dc{egs8o{-bo{eo4n0{-dc{es0oo{-bo{ezd30{-dc{f394o{-bo{falj0{-dc{fehko{-bo{fltz0{-dc{fpq0o{-bo{fx2f0{-dc{g168o{-bo','America/Hermosillo','(GMT-07:00) Mountain Time - Hermosillo','-bo','America/Mazatlan','(GMT-06:00) Mountain Time - Chihuahua, Mazatlan','-bo{duyn0{-a0{e185c{-bo{e6730{-a0{ecglc{-bo{ehfj0{-a0{enwtc{-bo{esnz0{-a0{ez59c{-bo{f3wf0{-a0{fadpc{-bo{ffcn0{-a0{flm5c{-bo{fql30{-a0{fwulc{-bo{g1tj0{-a0','America/Mexico_City','(GMT-05:00) Central Time - Mexico City','-a0{duylc{-8c{e183o{-a0{e671c{-8c{ecgjo{-a0{ehfhc{-8c{enwro{-a0{esnxc{-8c{ez57o{-a0{f3wdc{-8c{fadno{-a0{ffclc{-8c{flm3o{-a0{fql1c{-8c{fwujo{-a0{g1thc{-8c','America/Cancun','(GMT-05:00) America Cancun','-a0{duylc{-8c{e183o{-a0{e491c{-8c'],'MY',['Asia/Kuala_Lumpur','(GMT+08:00) Kuala Lumpur','dc'],'MZ',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'NA',['Africa/Windhoek','(GMT+01:00) Windhoek','3c{duy80{1o{dzpdo{3c{e66o0{1o{eaxto{3c{ehf40{1o{em69o{3c{esnk0{1o{exepo{3c{f3w00{1o{f8n5o{3c{ffc80{1o{fjvlo{3c{fqko0{1o{fvbto{3c{g1t40{1o'],'NC',['Pacific/Noumea','(GMT+11:00) Noumea','ic'],'NE',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'NF',['Pacific/Norfolk','(GMT+11:00) Norfolk','j6{ebsg6{ic'],'NG',['Africa/Lagos','(GMT+01:00) Lagos','1o'],'NI',['America/Managua','(GMT-06:00) Managua','-a0'],'NL',['Europe/Amsterdam','(GMT+02:00) Amsterdam','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'NO',['Europe/Oslo','(GMT+02:00) Oslo','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'NP',['Asia/Katmandu','(GMT+05:45) Katmandu','9l'],'NR',['Pacific/Nauru','(GMT+12:00) Nauru','k0'],'NU',['Pacific/Niue','(GMT-11:00) Niue','-ic'],'NZ',['Pacific/Auckland','(GMT+12:00) Auckland','lo{duxrc{k0{e0c7c{lo{e667c{k0{ebknc{lo{ehenc{k0{emt3c{lo{esn3c{k0{ey1jc{lo{f3vjc{k0{f9hrc{lo{ffbrc{k0{fkq7c{lo{fqk7c{k0{fvync{lo{g1snc{k0'],'OM',['Asia/Dubai','(GMT+04:00) Dubai','6o'],'PA',['America/Panama','(GMT-05:00) Panama','-8c'],'PE',['America/Lima','(GMT-05:00) Lima','-8c'],'PF',['Pacific/Tahiti','(GMT-10:00) Tahiti','-go','Pacific/Marquesas','(GMT-09:30) Marquesas','-fu','Pacific/Gambier','(GMT-09:00) Gambier','-f0'],'PG',['Pacific/Port_Moresby','(GMT+10:00) Port Moresby','go'],'PH',['Asia/Manila','(GMT+08:00) Manila','dc'],'PK',['Asia/Karachi','(GMT+05:00) Karachi','8c'],'PL',['Europe/Warsaw','(GMT+02:00) Warsaw','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'PM',['America/Miquelon','(GMT-02:00) Miquelon','-3c{e1fqo{-50{e5bsc{-3c{eco6o{-50{egs0c{-3c{eo4eo{-50{es0gc{-3c{ezcuo{-50{f38wc{-3c{falao{-50{fehcc{-3c{fltqo{-50{fppsc{-3c{fx26o{-50{g160c{-3c'],'PN',['Pacific/Pitcairn','(GMT-08:00) Pitcairn','-dc'],'PR',['America/Puerto_Rico','(GMT-04:00) Puerto Rico','-6o'],'PS',['Asia/Gaza','(GMT+03:00) Gaza','50{e15f0{3c{e5xoo{50{ecdv0{3c{eh66c{50{enmb0{3c{esemc{50{ez2j0{3c{f3uuc{50{faaz0{3c{ff3ac{50{fljf0{3c{fqbqc{50{fwrv0{3c{g1k6c{50'],'PT',['Atlantic/Azores','(GMT+00:00) Azores','0{e17to{-1o{e5yxo{0{ecg9o{-1o{eh7do{0{enwho{-1o{esfto{0{ez4xo{-1o{f3o9o{0{faddo{-1o{ff4ho{0{fllto{-1o{fqcxo{0{fwu9o{-1o{g1ldo{0','Europe/Lisbon','(GMT+01:00) Lisbon','1o{e17to{0{e5yxo{1o{ecg9o{0{eh7do{1o{enwho{0{esfto{1o{ez4xo{0{f3o9o{1o{faddo{0{ff4ho{1o{fllto{0{fqcxo{1o{fwu9o{0{g1ldo{1o'],'PW',['Pacific/Palau','(GMT+09:00) Palau','f0'],'PY',['America/Asuncion','(GMT-04:00) Asuncion','-6o{e0kmo{-50{e5r90{-6o{ebt2o{-50{eh7h0{-6o{en1io{-50{esfx0{-6o{ey9yo{-50{f3od0{-6o{f9q6o{-50{fewt0{-6o{fkymo{-50{fq590{-6o{fw72o{-50{g1lh0{-6o'],'QA',['Asia/Qatar','(GMT+03:00) Qatar','50'],'RE',['Indian/Reunion','(GMT+04:00) Reunion','6o'],'RO',['Europe/Bucharest','(GMT+03:00) Bucharest','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'RS',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'RU',['Europe/Kaliningrad','(GMT+02:00) Moscow-01 - Kaliningrad','50{e17qc{3c','Europe/Moscow','(GMT+03:00) Moscow+00 - Moscow','6o{e17oo{50','Europe/Samara','(GMT+04:00) Moscow+01 - Samara','6o','Asia/Yekaterinburg','(GMT+05:00) Moscow+02 - Yekaterinburg','a0{e17lc{8c','Asia/Omsk','(GMT+06:00) Moscow+03 - Omsk, Novosibirsk','bo{e17jo{a0','Asia/Krasnoyarsk','(GMT+07:00) Moscow+04 - Krasnoyarsk','dc{e17i0{bo','Asia/Irkutsk','(GMT+08:00) Moscow+05 - Irkutsk','f0{e17gc{dc','Asia/Yakutsk','(GMT+09:00) Moscow+06 - Yakutsk','go{e17eo{f0','Asia/Magadan','(GMT+10:00) Moscow+07 - Magadan','k0{e17bc{go','Asia/Vladivostok','(GMT+10:00) Moscow+07 - Yuzhno-Sakhalinsk','ic{e17d0{go','Asia/Kamchatka','(GMT+12:00) Moscow+09 - Petropavlovsk-Kamchatskiy','k0'],'RW',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'SA',['Asia/Riyadh','(GMT+03:00) Riyadh','50'],'SB',['Pacific/Guadalcanal','(GMT+11:00) Guadalcanal','ic'],'SC',['Indian/Mahe','(GMT+04:00) Mahe','6o'],'SD',['Africa/Khartoum','(GMT+03:00) Khartoum','50'],'SE',['Europe/Stockholm','(GMT+02:00) Stockholm','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'SG',['Asia/Singapore','(GMT+08:00) Singapore','dc'],'SH',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'SI',['Europe/Belgrade','(GMT+02:00) Central European Time - Belgrade','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'SJ',['Europe/Oslo','(GMT+02:00) Oslo','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'SK',['Europe/Prague','(GMT+02:00) Central European Time - Prague','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'SL',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'SM',['Europe/Rome','(GMT+02:00) Rome','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'SN',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'SO',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'SR',['America/Paramaribo','(GMT-03:00) Paramaribo','-50'],'SS',['Africa/Khartoum','(GMT+03:00) Khartoum','50'],'ST',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'SV',['America/El_Salvador','(GMT-06:00) El Salvador','-a0'],'SX',['America/Curacao','(GMT-04:00) Curacao','-6o'],'SY',['Asia/Damascus','(GMT+03:00) Damascus','50{e1d70{3c{e5wko{50{ecln0{3c{eh50o{50{enu30{3c{esl8o{50{ez2j0{3c{f3too{50{faaz0{3c{ff24o{50{fljf0{3c{fqako{50{fwzn0{3c{g1j0o{50'],'SZ',['Africa/Johannesburg','(GMT+02:00) Johannesburg','3c'],'TC',['America/Grand_Turk','(GMT-04:00) Grand Turk','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-6o'],'TD',['Africa/Ndjamena','(GMT+01:00) Ndjamena','1o'],'TF',['Indian/Kerguelen','(GMT+05:00) Kerguelen','8c'],'TG',['Africa/Abidjan','(GMT+00:00) Abidjan','0'],'TH',['Asia/Bangkok','(GMT+07:00) Bangkok','bo'],'TJ',['Asia/Dushanbe','(GMT+05:00) Dushanbe','8c'],'TK',['Pacific/Fakaofo','(GMT+13:00) Fakaofo','lo'],'TL',['Asia/Dili','(GMT+09:00) Dili','f0'],'TM',['Asia/Ashgabat','(GMT+05:00) Ashgabat','8c'],'TN',['Africa/Tunis','(GMT+01:00) Tunis','1o'],'TO',['Pacific/Tongatapu','(GMT+13:00) Tongatapu','lo'],'TR',['Europe/Istanbul','(GMT+03:00) Istanbul','50{e17to{3c{e5yxo{50{ecvto{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'TT',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'TV',['Pacific/Funafuti','(GMT+12:00) Funafuti','k0'],'TW',['Asia/Taipei','(GMT+08:00) Taipei','dc'],'TZ',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'UA',['Europe/Kiev','(GMT+03:00) Kiev','50{e17to{3c{e5yxo{50{ecg9o{3c{eh7do{50{enwho{3c{esfto{50{ez4xo{3c{f3o9o{50{faddo{3c{ff4ho{50{fllto{3c{fqcxo{50{fwu9o{3c{g1ldo{50'],'UG',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'UM',['Pacific/Pago_Pago','(GMT-11:00) Pago Pago','-ic','Pacific/Honolulu','(GMT-10:00) Hawaii Time','-go','Pacific/Wake','(GMT+12:00) Wake','k0','Pacific/Enderbury','(GMT+13:00) Enderbury','lo'],'US',['Pacific/Honolulu','(GMT-10:00) Hawaii Time','-go','America/Anchorage','(GMT-08:00) Alaska Time','-dc{e1g0o{-f0{e5c2c{-dc{ecogo{-f0{egsac{-dc{eo4oo{-f0{es0qc{-dc{ezd4o{-f0{f396c{-dc{falko{-f0{fehmc{-dc{flu0o{-f0{fpq2c{-dc{fx2go{-f0{g16ac{-dc','America/Los_Angeles','(GMT-07:00) Pacific Time','-bo{e1fz0{-dc{e5c0o{-bo{ecof0{-dc{egs8o{-bo{eo4n0{-dc{es0oo{-bo{ezd30{-dc{f394o{-bo{falj0{-dc{fehko{-bo{fltz0{-dc{fpq0o{-bo{fx2f0{-dc{g168o{-bo','America/Denver','(GMT-06:00) Mountain Time','-a0{e1fxc{-bo{e5bz0{-a0{ecodc{-bo{egs70{-a0{eo4lc{-bo{es0n0{-a0{ezd1c{-bo{f3930{-a0{falhc{-bo{fehj0{-a0{fltxc{-bo{fppz0{-a0{fx2dc{-bo{g1670{-a0','America/Phoenix','(GMT-07:00) Mountain Time - Arizona','-bo','America/Chicago','(GMT-05:00) Central Time','-8c{e1fvo{-a0{e5bxc{-8c{ecobo{-a0{egs5c{-8c{eo4jo{-a0{es0lc{-8c{ezczo{-a0{f391c{-8c{falfo{-a0{fehhc{-8c{fltvo{-a0{fppxc{-8c{fx2bo{-a0{g165c{-8c','America/New_York','(GMT-04:00) Eastern Time','-6o{e1fu0{-8c{e5bvo{-6o{ecoa0{-8c{egs3o{-6o{eo4i0{-8c{es0jo{-6o{ezcy0{-8c{f38zo{-6o{fale0{-8c{fehfo{-6o{fltu0{-8c{fppvo{-6o{fx2a0{-8c{g163o{-6o'],'UY',['America/Montevideo','(GMT-03:00) Montevideo','-50{e0koc{-3c{e5bqo{-50'],'UZ',['Asia/Tashkent','(GMT+05:00) Tashkent','8c'],'VA',['Europe/Rome','(GMT+02:00) Rome','3c{e17to{1o{e5yxo{3c{ecg9o{1o{eh7do{3c{enwho{1o{esfto{3c{ez4xo{1o{f3o9o{3c{faddo{1o{ff4ho{3c{fllto{1o{fqcxo{3c{fwu9o{1o{g1ldo{3c'],'VC',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'VE',['America/Caracas','(GMT-04:30) Caracas','-7i'],'VG',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'VI',['America/Port_of_Spain','(GMT-04:00) Port of Spain','-6o'],'VN',['Asia/Saigon','(GMT+07:00) Hanoi','bo'],'VU',['Pacific/Efate','(GMT+11:00) Efate','ic'],'WF',['Pacific/Wallis','(GMT+12:00) Wallis','k0'],'WS',['Pacific/Apia','(GMT+13:00) Apia','nc{duxrc{lo{e0c7c{nc{e667c{lo{ebknc{nc{ehenc{lo{emt3c{nc{esn3c{lo{ey1jc{nc{f3vjc{lo{f9hrc{nc{ffbrc{lo{fkq7c{nc{fqk7c{lo{fvync{nc{g1snc{lo'],'YE',['Asia/Riyadh','(GMT+03:00) Riyadh','50'],'YT',['Africa/Nairobi','(GMT+03:00) Nairobi','50'],'ZA',['Africa/Johannesburg','(GMT+02:00) Johannesburg','3c'],'ZM',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'ZW',['Africa/Maputo','(GMT+02:00) Maputo','3c'],'ZZ',['Etc/GMT','(GMT+00:00) GMT (no daylight saving)','0']]
{
"name": "gist-timezone-poc",
"version": "1.0.0",
"description": "Proof of concept to explore timezones in PostgreSQL and between server/browser",
"main": "get-moment-timezones.js",
"scripts": {
"generate-country-codes": "node cleanup-google-calendar-countries.js > country-codes.json",
"generate-locales": "node cleanup-google-calendar-tz.js > tz-locales.json",
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+ssh://[email protected]/06fe0872ce9e8dfb0d522aa2dedfc5c2.git"
},
"author": "Todd Wolfson <[email protected]> (http://twolfson.com/)",
"license": "Unlicense",
"bugs": {
"url": "https://gist.github.com/06fe0872ce9e8dfb0d522aa2dedfc5c2"
},
"homepage": "https://gist.github.com/06fe0872ce9e8dfb0d522aa2dedfc5c2",
"dependencies": {
"cheerio": "~0.20.0",
"moment": "~2.12.0",
"moment-timezone": "~0.5.3"
}
}
#!/usr/bin/env bash
# Exit on first error
set -e
# Create/reset our database
dropdb timezone-test || true
createdb timezone-test
# Set up a table for our test
psql timezone-test < reset-db.sql
# Notify user of how to connect to db
echo "To connect to database, run \`psql timezone-test\`" 1>&2
-- Create our table
CREATE TABLE item (
id VARCHAR(36) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL
);
-- Insert some test data
-- No time zone, UTC offset
INSERT INTO item (id, created_at) VALUES ('no-tz-utc', '2016-01-01T12:00:00Z');
-- No time zone, non-UTC offset
INSERT INTO item (id, created_at) VALUES ('no-tz-offset', '2016-01-01T12:00:00-06:00');
-- Syntax via http://justatheory.com/computers/databases/postgresql/use-timestamptz.html
-- With time zone, UTC offset
INSERT INTO item (id, created_at) VALUES ('with-tz-utc', '2016-01-01T12:00:00Z' AT TIME ZONE 'America/Chicago');
-- With time zone, non-UTC offset
INSERT INTO item (id, created_at) VALUES ('with-tz-offset', '2016-01-01T12:00:00-06:00' AT TIME ZONE 'America/Chicago');
-- Output data
-- DEV: Timezone is being remove at save time, damn
-- http://stackoverflow.com/a/26782219
SELECT * FROM item;
{
"AD": {
"Europe/Andorra": "(GMT+02:00) Andorra"
},
"AE": {
"Asia/Dubai": "(GMT+04:00) Dubai"
},
"AF": {
"Asia/Kabul": "(GMT+04:30) Kabul"
},
"AG": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"AI": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"AL": {
"Europe/Tirane": "(GMT+02:00) Tirane"
},
"AM": {
"Asia/Yerevan": "(GMT+04:00) Yerevan"
},
"AN": {
"America/Curacao": "(GMT-04:00) Curacao"
},
"AO": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"AQ": {
"Antarctica/Palmer": "(GMT-03:00) Palmer",
"Antarctica/Rothera": "(GMT-03:00) Rothera",
"Antarctica/Syowa": "(GMT+03:00) Syowa",
"Antarctica/Mawson": "(GMT+05:00) Mawson",
"Antarctica/Vostok": "(GMT+06:00) Vostok",
"Antarctica/Davis": "(GMT+07:00) Davis",
"Antarctica/Casey": "(GMT+08:00) Casey",
"Antarctica/DumontDUrville": "(GMT+10:00) Dumont D'Urville",
"Pacific/Auckland": "(GMT+12:00) Auckland"
},
"AR": {
"America/Argentina/Buenos_Aires": "(GMT-03:00) Buenos Aires"
},
"AS": {
"Pacific/Pago_Pago": "(GMT-11:00) Pago Pago"
},
"AT": {
"Europe/Vienna": "(GMT+02:00) Vienna"
},
"AU": {
"Australia/Perth": "(GMT+08:00) Western Time - Perth",
"Australia/Adelaide": "(GMT+09:30) Central Time - Adelaide",
"Australia/Darwin": "(GMT+09:30) Central Time - Darwin",
"Australia/Brisbane": "(GMT+10:00) Eastern Time - Brisbane",
"Australia/Hobart": "(GMT+10:00) Eastern Time - Hobart",
"Australia/Sydney": "(GMT+10:00) Eastern Time - Melbourne, Sydney"
},
"AW": {
"America/Curacao": "(GMT-04:00) Curacao"
},
"AX": {
"Europe/Helsinki": "(GMT+03:00) Helsinki"
},
"AZ": {
"Asia/Baku": "(GMT+04:00) Baku"
},
"BA": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"BB": {
"America/Barbados": "(GMT-04:00) Barbados"
},
"BD": {
"Asia/Dhaka": "(GMT+06:00) Dhaka"
},
"BE": {
"Europe/Brussels": "(GMT+02:00) Brussels"
},
"BF": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"BG": {
"Europe/Sofia": "(GMT+03:00) Sofia"
},
"BH": {
"Asia/Qatar": "(GMT+03:00) Qatar"
},
"BI": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"BJ": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"BM": {
"Atlantic/Bermuda": "(GMT-03:00) Bermuda"
},
"BN": {
"Asia/Brunei": "(GMT+08:00) Brunei"
},
"BO": {
"America/La_Paz": "(GMT-04:00) La Paz"
},
"BQ": {
"America/Curacao": "(GMT-04:00) Curacao"
},
"BR": {
"America/Rio_Branco": "(GMT-05:00) Rio Branco",
"America/Boa_Vista": "(GMT-04:00) Boa Vista",
"America/Campo_Grande": "(GMT-04:00) Campo Grande",
"America/Cuiaba": "(GMT-04:00) Cuiaba",
"America/Manaus": "(GMT-04:00) Manaus",
"America/Porto_Velho": "(GMT-04:00) Porto Velho",
"America/Araguaina": "(GMT-03:00) Araguaina",
"America/Bahia": "(GMT-03:00) Salvador",
"America/Belem": "(GMT-03:00) Belem",
"America/Fortaleza": "(GMT-03:00) Fortaleza",
"America/Maceio": "(GMT-03:00) Maceio",
"America/Recife": "(GMT-03:00) Recife",
"America/Sao_Paulo": "(GMT-03:00) Sao Paulo",
"America/Noronha": "(GMT-02:00) Noronha"
},
"BS": {
"America/Nassau": "(GMT-04:00) Nassau"
},
"BT": {
"Asia/Thimphu": "(GMT+06:00) Thimphu"
},
"BV": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"BW": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"BY": {
"Europe/Minsk": "(GMT+03:00) Minsk"
},
"BZ": {
"America/Belize": "(GMT-06:00) Belize"
},
"CA": {
"America/Vancouver": "(GMT-07:00) Pacific Time - Vancouver",
"America/Whitehorse": "(GMT-07:00) Pacific Time - Whitehorse",
"America/Dawson_Creek": "(GMT-07:00) Mountain Time - Dawson Creek",
"America/Edmonton": "(GMT-06:00) Mountain Time - Edmonton",
"America/Yellowknife": "(GMT-06:00) Mountain Time - Yellowknife",
"America/Regina": "(GMT-06:00) Central Time - Regina",
"America/Winnipeg": "(GMT-05:00) Central Time - Winnipeg",
"America/Iqaluit": "(GMT-04:00) Eastern Time - Iqaluit",
"America/Toronto": "(GMT-04:00) Eastern Time - Toronto",
"America/Halifax": "(GMT-03:00) Atlantic Time - Halifax",
"America/St_Johns": "(GMT-02:30) Newfoundland Time - St. Johns"
},
"CC": {
"Indian/Cocos": "(GMT+06:30) Cocos"
},
"CD": {
"Africa/Lagos": "(GMT+01:00) Lagos",
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"CF": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"CG": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"CH": {
"Europe/Zurich": "(GMT+02:00) Zurich"
},
"CI": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"CK": {
"Pacific/Rarotonga": "(GMT-10:00) Rarotonga"
},
"CL": {
"Pacific/Easter": "(GMT-05:00) Easter Island",
"America/Santiago": "(GMT-03:00) Santiago"
},
"CM": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"CN": {
"Asia/Shanghai": "(GMT+08:00) China Time - Beijing"
},
"CO": {
"America/Bogota": "(GMT-05:00) Bogota"
},
"CR": {
"America/Costa_Rica": "(GMT-06:00) Costa Rica"
},
"CS": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"CU": {
"America/Havana": "(GMT-04:00) Havana"
},
"CV": {
"Atlantic/Cape_Verde": "(GMT-01:00) Cape Verde"
},
"CW": {
"America/Curacao": "(GMT-04:00) Curacao"
},
"CX": {
"Indian/Christmas": "(GMT+07:00) Christmas"
},
"CY": {
"Asia/Nicosia": "(GMT+03:00) Nicosia"
},
"CZ": {
"Europe/Prague": "(GMT+02:00) Central European Time - Prague"
},
"DE": {
"Europe/Berlin": "(GMT+02:00) Berlin"
},
"DJ": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"DK": {
"Europe/Copenhagen": "(GMT+02:00) Copenhagen"
},
"DM": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"DO": {
"America/Santo_Domingo": "(GMT-04:00) Santo Domingo"
},
"DZ": {
"Africa/Algiers": "(GMT+01:00) Algiers"
},
"EC": {
"Pacific/Galapagos": "(GMT-06:00) Galapagos",
"America/Guayaquil": "(GMT-05:00) Guayaquil"
},
"EE": {
"Europe/Tallinn": "(GMT+03:00) Tallinn"
},
"EG": {
"Africa/Cairo": "(GMT+02:00) Cairo"
},
"EH": {
"Africa/El_Aaiun": "(GMT+01:00) El Aaiun"
},
"ER": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"ES": {
"Atlantic/Canary": "(GMT+01:00) Canary Islands",
"Africa/Ceuta": "(GMT+02:00) Ceuta",
"Europe/Madrid": "(GMT+02:00) Madrid"
},
"ET": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"FI": {
"Europe/Helsinki": "(GMT+03:00) Helsinki"
},
"FJ": {
"Pacific/Fiji": "(GMT+12:00) Fiji"
},
"FK": {
"Atlantic/Stanley": "(GMT-03:00) Stanley"
},
"FM": {
"Pacific/Chuuk": "(GMT+10:00) Truk",
"Pacific/Kosrae": "(GMT+11:00) Kosrae",
"Pacific/Pohnpei": "(GMT+11:00) Ponape"
},
"FO": {
"Atlantic/Faroe": "(GMT+01:00) Faeroe"
},
"FR": {
"Europe/Paris": "(GMT+02:00) Paris"
},
"GA": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"GB": {
"Europe/London": "(GMT+01:00) London"
},
"GD": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"GE": {
"Asia/Tbilisi": "(GMT+04:00) Tbilisi"
},
"GF": {
"America/Cayenne": "(GMT-03:00) Cayenne"
},
"GG": {
"Europe/London": "(GMT+01:00) London"
},
"GH": {
"Africa/Accra": "(GMT+00:00) Accra"
},
"GI": {
"Europe/Gibraltar": "(GMT+02:00) Gibraltar"
},
"GL": {
"America/Thule": "(GMT-03:00) Thule",
"America/Godthab": "(GMT-02:00) Godthab",
"America/Scoresbysund": "(GMT+00:00) Scoresbysund",
"America/Danmarkshavn": "(GMT+00:00) Danmarkshavn"
},
"GM": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"GN": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"GP": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"GQ": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"GR": {
"Europe/Athens": "(GMT+03:00) Athens"
},
"GS": {
"Atlantic/South_Georgia": "(GMT-02:00) South Georgia"
},
"GT": {
"America/Guatemala": "(GMT-06:00) Guatemala"
},
"GU": {
"Pacific/Guam": "(GMT+10:00) Guam"
},
"GW": {
"Africa/Bissau": "(GMT+00:00) Bissau"
},
"GY": {
"America/Guyana": "(GMT-04:00) Guyana"
},
"HK": {
"Asia/Hong_Kong": "(GMT+08:00) Hong Kong"
},
"HM": {
"Indian/Kerguelen": "(GMT+05:00) Kerguelen"
},
"HN": {
"America/Tegucigalpa": "(GMT-06:00) Central Time - Tegucigalpa"
},
"HR": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"HT": {
"America/Port-au-Prince": "(GMT-05:00) Port-au-Prince"
},
"HU": {
"Europe/Budapest": "(GMT+02:00) Budapest"
},
"ID": {
"Asia/Jakarta": "(GMT+07:00) Jakarta",
"Asia/Makassar": "(GMT+08:00) Makassar",
"Asia/Jayapura": "(GMT+09:00) Jayapura"
},
"IE": {
"Europe/Dublin": "(GMT+01:00) Dublin"
},
"IL": {
"Asia/Jerusalem": "(GMT+03:00) Jerusalem"
},
"IM": {
"Europe/London": "(GMT+01:00) London"
},
"IN": {
"Asia/Calcutta": "(GMT+05:30) India Standard Time"
},
"IO": {
"Indian/Chagos": "(GMT+06:00) Chagos"
},
"IQ": {
"Asia/Baghdad": "(GMT+03:00) Baghdad"
},
"IR": {
"Asia/Tehran": "(GMT+04:30) Tehran"
},
"IS": {
"Atlantic/Reykjavik": "(GMT+00:00) Reykjavik"
},
"IT": {
"Europe/Rome": "(GMT+02:00) Rome"
},
"JE": {
"Europe/London": "(GMT+01:00) London"
},
"JM": {
"America/Jamaica": "(GMT-05:00) Jamaica"
},
"JO": {
"Asia/Amman": "(GMT+03:00) Amman"
},
"JP": {
"Asia/Tokyo": "(GMT+09:00) Tokyo"
},
"KE": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"KG": {
"Asia/Bishkek": "(GMT+06:00) Bishkek"
},
"KH": {
"Asia/Bangkok": "(GMT+07:00) Bangkok"
},
"KI": {
"Pacific/Tarawa": "(GMT+12:00) Tarawa",
"Pacific/Kiritimati": "(GMT+14:00) Kiritimati"
},
"KM": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"KN": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"KP": {
"Asia/Pyongyang": "(GMT+08:30) Pyongyang"
},
"KR": {
"Asia/Seoul": "(GMT+09:00) Seoul"
},
"KW": {
"Asia/Riyadh": "(GMT+03:00) Riyadh"
},
"KY": {
"America/Panama": "(GMT-05:00) Panama"
},
"KZ": {
"Asia/Aqtau": "(GMT+05:00) Aqtau",
"Asia/Aqtobe": "(GMT+05:00) Aqtobe",
"Asia/Almaty": "(GMT+06:00) Almaty"
},
"LA": {
"Asia/Bangkok": "(GMT+07:00) Bangkok"
},
"LB": {
"Asia/Beirut": "(GMT+03:00) Beirut"
},
"LC": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"LI": {
"Europe/Zurich": "(GMT+02:00) Zurich"
},
"LK": {
"Asia/Colombo": "(GMT+05:30) Colombo"
},
"LR": {
"Africa/Monrovia": "(GMT+00:00) Monrovia"
},
"LS": {
"Africa/Johannesburg": "(GMT+02:00) Johannesburg"
},
"LT": {
"Europe/Vilnius": "(GMT+03:00) Vilnius"
},
"LU": {
"Europe/Luxembourg": "(GMT+02:00) Luxembourg"
},
"LV": {
"Europe/Riga": "(GMT+03:00) Riga"
},
"LY": {
"Africa/Tripoli": "(GMT+02:00) Tripoli"
},
"MA": {
"Africa/Casablanca": "(GMT+01:00) Casablanca"
},
"MC": {
"Europe/Monaco": "(GMT+02:00) Monaco"
},
"MD": {
"Europe/Chisinau": "(GMT+03:00) Chisinau"
},
"ME": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"MF": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"MG": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"MH": {
"Pacific/Kwajalein": "(GMT+12:00) Kwajalein",
"Pacific/Majuro": "(GMT+12:00) Majuro"
},
"MK": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"ML": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"MM": {
"Asia/Rangoon": "(GMT+06:30) Rangoon"
},
"MN": {
"Asia/Hovd": "(GMT+08:00) Hovd",
"Asia/Choibalsan": "(GMT+09:00) Choibalsan",
"Asia/Ulaanbaatar": "(GMT+09:00) Ulaanbaatar"
},
"MO": {
"Asia/Macau": "(GMT+08:00) Macau"
},
"MP": {
"Pacific/Guam": "(GMT+10:00) Guam"
},
"MQ": {
"America/Martinique": "(GMT-04:00) Martinique"
},
"MR": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"MS": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"MT": {
"Europe/Malta": "(GMT+02:00) Malta"
},
"MU": {
"Indian/Mauritius": "(GMT+04:00) Mauritius"
},
"MV": {
"Indian/Maldives": "(GMT+05:00) Maldives"
},
"MW": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"MX": {
"America/Tijuana": "(GMT-07:00) Pacific Time - Tijuana",
"America/Hermosillo": "(GMT-07:00) Mountain Time - Hermosillo",
"America/Mazatlan": "(GMT-06:00) Mountain Time - Chihuahua, Mazatlan",
"America/Mexico_City": "(GMT-05:00) Central Time - Mexico City",
"America/Cancun": "(GMT-05:00) America Cancun"
},
"MY": {
"Asia/Kuala_Lumpur": "(GMT+08:00) Kuala Lumpur"
},
"MZ": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"NA": {
"Africa/Windhoek": "(GMT+01:00) Windhoek"
},
"NC": {
"Pacific/Noumea": "(GMT+11:00) Noumea"
},
"NE": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"NF": {
"Pacific/Norfolk": "(GMT+11:00) Norfolk"
},
"NG": {
"Africa/Lagos": "(GMT+01:00) Lagos"
},
"NI": {
"America/Managua": "(GMT-06:00) Managua"
},
"NL": {
"Europe/Amsterdam": "(GMT+02:00) Amsterdam"
},
"NO": {
"Europe/Oslo": "(GMT+02:00) Oslo"
},
"NP": {
"Asia/Katmandu": "(GMT+05:45) Katmandu"
},
"NR": {
"Pacific/Nauru": "(GMT+12:00) Nauru"
},
"NU": {
"Pacific/Niue": "(GMT-11:00) Niue"
},
"NZ": {
"Pacific/Auckland": "(GMT+12:00) Auckland"
},
"OM": {
"Asia/Dubai": "(GMT+04:00) Dubai"
},
"PA": {
"America/Panama": "(GMT-05:00) Panama"
},
"PE": {
"America/Lima": "(GMT-05:00) Lima"
},
"PF": {
"Pacific/Tahiti": "(GMT-10:00) Tahiti",
"Pacific/Marquesas": "(GMT-09:30) Marquesas",
"Pacific/Gambier": "(GMT-09:00) Gambier"
},
"PG": {
"Pacific/Port_Moresby": "(GMT+10:00) Port Moresby"
},
"PH": {
"Asia/Manila": "(GMT+08:00) Manila"
},
"PK": {
"Asia/Karachi": "(GMT+05:00) Karachi"
},
"PL": {
"Europe/Warsaw": "(GMT+02:00) Warsaw"
},
"PM": {
"America/Miquelon": "(GMT-02:00) Miquelon"
},
"PN": {
"Pacific/Pitcairn": "(GMT-08:00) Pitcairn"
},
"PR": {
"America/Puerto_Rico": "(GMT-04:00) Puerto Rico"
},
"PS": {
"Asia/Gaza": "(GMT+03:00) Gaza"
},
"PT": {
"Atlantic/Azores": "(GMT+00:00) Azores",
"Europe/Lisbon": "(GMT+01:00) Lisbon"
},
"PW": {
"Pacific/Palau": "(GMT+09:00) Palau"
},
"PY": {
"America/Asuncion": "(GMT-04:00) Asuncion"
},
"QA": {
"Asia/Qatar": "(GMT+03:00) Qatar"
},
"RE": {
"Indian/Reunion": "(GMT+04:00) Reunion"
},
"RO": {
"Europe/Bucharest": "(GMT+03:00) Bucharest"
},
"RS": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"RU": {
"Europe/Kaliningrad": "(GMT+02:00) Moscow-01 - Kaliningrad",
"Europe/Moscow": "(GMT+03:00) Moscow+00 - Moscow",
"Europe/Samara": "(GMT+04:00) Moscow+01 - Samara",
"Asia/Yekaterinburg": "(GMT+05:00) Moscow+02 - Yekaterinburg",
"Asia/Omsk": "(GMT+06:00) Moscow+03 - Omsk, Novosibirsk",
"Asia/Krasnoyarsk": "(GMT+07:00) Moscow+04 - Krasnoyarsk",
"Asia/Irkutsk": "(GMT+08:00) Moscow+05 - Irkutsk",
"Asia/Yakutsk": "(GMT+09:00) Moscow+06 - Yakutsk",
"Asia/Magadan": "(GMT+10:00) Moscow+07 - Magadan",
"Asia/Vladivostok": "(GMT+10:00) Moscow+07 - Yuzhno-Sakhalinsk",
"Asia/Kamchatka": "(GMT+12:00) Moscow+09 - Petropavlovsk-Kamchatskiy"
},
"RW": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"SA": {
"Asia/Riyadh": "(GMT+03:00) Riyadh"
},
"SB": {
"Pacific/Guadalcanal": "(GMT+11:00) Guadalcanal"
},
"SC": {
"Indian/Mahe": "(GMT+04:00) Mahe"
},
"SD": {
"Africa/Khartoum": "(GMT+03:00) Khartoum"
},
"SE": {
"Europe/Stockholm": "(GMT+02:00) Stockholm"
},
"SG": {
"Asia/Singapore": "(GMT+08:00) Singapore"
},
"SH": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"SI": {
"Europe/Belgrade": "(GMT+02:00) Central European Time - Belgrade"
},
"SJ": {
"Europe/Oslo": "(GMT+02:00) Oslo"
},
"SK": {
"Europe/Prague": "(GMT+02:00) Central European Time - Prague"
},
"SL": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"SM": {
"Europe/Rome": "(GMT+02:00) Rome"
},
"SN": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"SO": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"SR": {
"America/Paramaribo": "(GMT-03:00) Paramaribo"
},
"SS": {
"Africa/Khartoum": "(GMT+03:00) Khartoum"
},
"ST": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"SV": {
"America/El_Salvador": "(GMT-06:00) El Salvador"
},
"SX": {
"America/Curacao": "(GMT-04:00) Curacao"
},
"SY": {
"Asia/Damascus": "(GMT+03:00) Damascus"
},
"SZ": {
"Africa/Johannesburg": "(GMT+02:00) Johannesburg"
},
"TC": {
"America/Grand_Turk": "(GMT-04:00) Grand Turk"
},
"TD": {
"Africa/Ndjamena": "(GMT+01:00) Ndjamena"
},
"TF": {
"Indian/Kerguelen": "(GMT+05:00) Kerguelen"
},
"TG": {
"Africa/Abidjan": "(GMT+00:00) Abidjan"
},
"TH": {
"Asia/Bangkok": "(GMT+07:00) Bangkok"
},
"TJ": {
"Asia/Dushanbe": "(GMT+05:00) Dushanbe"
},
"TK": {
"Pacific/Fakaofo": "(GMT+13:00) Fakaofo"
},
"TL": {
"Asia/Dili": "(GMT+09:00) Dili"
},
"TM": {
"Asia/Ashgabat": "(GMT+05:00) Ashgabat"
},
"TN": {
"Africa/Tunis": "(GMT+01:00) Tunis"
},
"TO": {
"Pacific/Tongatapu": "(GMT+13:00) Tongatapu"
},
"TR": {
"Europe/Istanbul": "(GMT+03:00) Istanbul"
},
"TT": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"TV": {
"Pacific/Funafuti": "(GMT+12:00) Funafuti"
},
"TW": {
"Asia/Taipei": "(GMT+08:00) Taipei"
},
"TZ": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"UA": {
"Europe/Kiev": "(GMT+03:00) Kiev"
},
"UG": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"UM": {
"Pacific/Pago_Pago": "(GMT-11:00) Pago Pago",
"Pacific/Honolulu": "(GMT-10:00) Hawaii Time",
"Pacific/Wake": "(GMT+12:00) Wake",
"Pacific/Enderbury": "(GMT+13:00) Enderbury"
},
"US": {
"Pacific/Honolulu": "(GMT-10:00) Hawaii Time",
"America/Anchorage": "(GMT-08:00) Alaska Time",
"America/Los_Angeles": "(GMT-07:00) Pacific Time",
"America/Denver": "(GMT-06:00) Mountain Time",
"America/Phoenix": "(GMT-07:00) Mountain Time - Arizona",
"America/Chicago": "(GMT-05:00) Central Time",
"America/New_York": "(GMT-04:00) Eastern Time"
},
"UY": {
"America/Montevideo": "(GMT-03:00) Montevideo"
},
"UZ": {
"Asia/Tashkent": "(GMT+05:00) Tashkent"
},
"VA": {
"Europe/Rome": "(GMT+02:00) Rome"
},
"VC": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"VE": {
"America/Caracas": "(GMT-04:30) Caracas"
},
"VG": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"VI": {
"America/Port_of_Spain": "(GMT-04:00) Port of Spain"
},
"VN": {
"Asia/Saigon": "(GMT+07:00) Hanoi"
},
"VU": {
"Pacific/Efate": "(GMT+11:00) Efate"
},
"WF": {
"Pacific/Wallis": "(GMT+12:00) Wallis"
},
"WS": {
"Pacific/Apia": "(GMT+13:00) Apia"
},
"YE": {
"Asia/Riyadh": "(GMT+03:00) Riyadh"
},
"YT": {
"Africa/Nairobi": "(GMT+03:00) Nairobi"
},
"ZA": {
"Africa/Johannesburg": "(GMT+02:00) Johannesburg"
},
"ZM": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"ZW": {
"Africa/Maputo": "(GMT+02:00) Maputo"
},
"ZZ": {
"Etc/GMT": "(GMT+00:00) GMT (no daylight saving)"
}
}
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
# Set our box as [email protected] LTS
# https://atlas.hashicorp.com/ubuntu/boxes/trusty64
config.vm.box = "ubuntu/trusty64"
# Give additional memory and CPU to VirtualBox provider
# https://docs.vagrantup.com/v2/virtualbox/configuration.html
config.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
end
# Provision our box with a script
config.vm.provision("shell", :path => "bootstrap.sh")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment