Commit 3023ed77 authored by Volker Krause's avatar Volker Krause
Browse files

Fix the side-effects of openSUSE adding an Asia/Beijing timezone

Other systems don't have that and instead use Asia/Shanghai as defined
in the timezone database. This caused different timezone lookup results
in the vicinity of China on those systems, like in the HKG test.

We no explicitly check for this when generating our timezone tables.
parent c0296cde
Pipeline #29069 passed with stage
in 13 minutes and 34 seconds
......@@ -44,7 +44,7 @@
"departureTime": {
"@type": "QDateTime",
"@value": "2017-01-20T11:45:00+08:00",
"timezone": "Asia/Hong_Kong"
"timezone": "Asia/Shanghai"
},
"flightNumber": "38"
},
......@@ -101,7 +101,7 @@
"departureTime": {
"@type": "QDateTime",
"@value": "2017-01-20T11:45:00+08:00",
"timezone": "Asia/Hong_Kong"
"timezone": "Asia/Shanghai"
},
"flightNumber": "38"
},
......@@ -158,7 +158,7 @@
"departureTime": {
"@type": "QDateTime",
"@value": "2017-01-20T11:45:00+08:00",
"timezone": "Asia/Hong_Kong"
"timezone": "Asia/Shanghai"
},
"flightNumber": "38"
},
......
......@@ -50,13 +50,8 @@ Timezones::Timezones()
}
}
std::sort(m_zones.begin(), m_zones.end());
m_zoneOffsets.reserve(m_zones.size());
uint16_t offset = 0;
for (const auto &tz : m_zones) {
m_zoneOffsets.push_back(offset);
offset += tz.size() + 1; // +1 of the trailing null byte
}
/* Remove non-official zones that openSUSE patches into their zonetab. */
removeZone("Asia/Beijing");
/* Manual overrides for countries that de-facto only have a single timezone,
* even if the IANA database doesn't reflect that.
......@@ -70,6 +65,16 @@ Timezones::Timezones()
/* Manual overrides for timezones that do not belong to a unique country, contrary what zonetab claims. */
setCountryForZone("Asia/Bangkok", {}); // also used in northern Vietnam
setCountryForZone("Europe/Simferopol", {}); // disputed area
// create offset index
std::sort(m_zones.begin(), m_zones.end());
m_zoneOffsets.reserve(m_zones.size());
uint16_t offset = 0;
for (const auto &tz : m_zones) {
m_zoneOffsets.push_back(offset);
offset += tz.size() + 1; // +1 of the trailing null byte
}
}
Timezones::~Timezones() = default;
......@@ -91,3 +96,12 @@ void Timezones::setCountryForZone(const QByteArray &tz, const QString &country)
}
(*it).second = country;
}
void Timezones::removeZone(const QByteArray &tz)
{
m_zones.erase(std::remove(m_zones.begin(), m_zones.end(), tz), m_zones.end());
m_countryForZone.erase(tz);
for (auto &it : m_countryZones) {
it.second.erase(std::remove(it.second.begin(), it.second.end(), tz), it.second.end());
}
}
......@@ -24,8 +24,6 @@ public:
Timezones();
~Timezones();
QByteArray timezoneForLocation(const QString &isoCode, KnowledgeDb::Coordinate coord) const;
// the offset into the timezone string table
uint16_t offset(const QByteArray &tz) const;
......@@ -33,6 +31,7 @@ private:
friend class TimezoneDbGenerator;
void setCountryForZone(const QByteArray &tz, const QString &country);
void removeZone(const QByteArray &tz);
std::vector<QByteArray> m_zones;
std::vector<uint16_t> m_zoneOffsets;
......
......@@ -236,7 +236,6 @@ static const char timezone_names[] =
"Asia/Baku\0"
"Asia/Bangkok\0"
"Asia/Barnaul\0"
"Asia/Beijing\0"
"Asia/Beirut\0"
"Asia/Bishkek\0"
"Asia/Brunei\0"
......@@ -666,208 +665,207 @@ static constexpr const uint16_t timezone_names_offsets[] = {
3937, // Asia/Baku
3947, // Asia/Bangkok
3960, // Asia/Barnaul
3973, // Asia/Beijing
3986, // Asia/Beirut
3998, // Asia/Bishkek
4011, // Asia/Brunei
4023, // Asia/Chita
4034, // Asia/Choibalsan
4050, // Asia/Colombo
4063, // Asia/Damascus
4077, // Asia/Dhaka
4088, // Asia/Dili
4098, // Asia/Dubai
4109, // Asia/Dushanbe
4123, // Asia/Famagusta
4138, // Asia/Gaza
4148, // Asia/Hebron
4160, // Asia/Ho_Chi_Minh
4177, // Asia/Hong_Kong
4192, // Asia/Hovd
4202, // Asia/Irkutsk
4215, // Asia/Jakarta
4228, // Asia/Jayapura
4242, // Asia/Jerusalem
4257, // Asia/Kabul
4268, // Asia/Kamchatka
4283, // Asia/Karachi
4296, // Asia/Kathmandu
4311, // Asia/Khandyga
4325, // Asia/Kolkata
4338, // Asia/Krasnoyarsk
4355, // Asia/Kuala_Lumpur
4373, // Asia/Kuching
4386, // Asia/Kuwait
4398, // Asia/Macau
4409, // Asia/Magadan
4422, // Asia/Makassar
4436, // Asia/Manila
4448, // Asia/Muscat
4460, // Asia/Nicosia
4473, // Asia/Novokuznetsk
4491, // Asia/Novosibirsk
4508, // Asia/Omsk
4518, // Asia/Oral
4528, // Asia/Phnom_Penh
4544, // Asia/Pontianak
4559, // Asia/Pyongyang
4574, // Asia/Qatar
4585, // Asia/Qostanay
4599, // Asia/Qyzylorda
4614, // Asia/Riyadh
4626, // Asia/Sakhalin
4640, // Asia/Samarkand
4655, // Asia/Seoul
4666, // Asia/Shanghai
4680, // Asia/Singapore
4695, // Asia/Srednekolymsk
4714, // Asia/Taipei
4726, // Asia/Tashkent
4740, // Asia/Tbilisi
4753, // Asia/Tehran
4765, // Asia/Thimphu
4778, // Asia/Tokyo
4789, // Asia/Tomsk
4800, // Asia/Ulaanbaatar
4817, // Asia/Urumqi
4829, // Asia/Ust-Nera
4843, // Asia/Vientiane
4858, // Asia/Vladivostok
4875, // Asia/Yakutsk
4888, // Asia/Yangon
4900, // Asia/Yekaterinburg
4919, // Asia/Yerevan
4932, // Atlantic/Azores
4948, // Atlantic/Bermuda
4965, // Atlantic/Canary
4981, // Atlantic/Cape_Verde
5001, // Atlantic/Faroe
5016, // Atlantic/Madeira
5033, // Atlantic/Reykjavik
5052, // Atlantic/South_Georgia
5075, // Atlantic/St_Helena
5094, // Atlantic/Stanley
5111, // Australia/Adelaide
5130, // Australia/Brisbane
5149, // Australia/Broken_Hill
5171, // Australia/Currie
5188, // Australia/Darwin
5205, // Australia/Eucla
5221, // Australia/Hobart
5238, // Australia/Lindeman
5257, // Australia/Lord_Howe
5277, // Australia/Melbourne
5297, // Australia/Perth
5313, // Australia/Sydney
5330, // Europe/Amsterdam
5347, // Europe/Andorra
5362, // Europe/Astrakhan
5379, // Europe/Athens
5393, // Europe/Belgrade
5409, // Europe/Berlin
5423, // Europe/Bratislava
5441, // Europe/Brussels
5457, // Europe/Bucharest
5474, // Europe/Budapest
5490, // Europe/Busingen
5506, // Europe/Chisinau
5522, // Europe/Copenhagen
5540, // Europe/Dublin
5554, // Europe/Gibraltar
5571, // Europe/Guernsey
5587, // Europe/Helsinki
5603, // Europe/Isle_of_Man
5622, // Europe/Istanbul
5638, // Europe/Jersey
5652, // Europe/Kaliningrad
5671, // Europe/Kiev
5683, // Europe/Kirov
5696, // Europe/Lisbon
5710, // Europe/Ljubljana
5727, // Europe/London
5741, // Europe/Luxembourg
5759, // Europe/Madrid
5773, // Europe/Malta
5786, // Europe/Mariehamn
5803, // Europe/Minsk
5816, // Europe/Monaco
5830, // Europe/Moscow
5844, // Europe/Oslo
5856, // Europe/Paris
5869, // Europe/Podgorica
5886, // Europe/Prague
5900, // Europe/Riga
5912, // Europe/Rome
5924, // Europe/Samara
5938, // Europe/San_Marino
5956, // Europe/Sarajevo
5972, // Europe/Saratov
5987, // Europe/Simferopol
6005, // Europe/Skopje
6019, // Europe/Sofia
6032, // Europe/Stockholm
6049, // Europe/Tallinn
6064, // Europe/Tirane
6078, // Europe/Ulyanovsk
6095, // Europe/Uzhgorod
6111, // Europe/Vaduz
6124, // Europe/Vatican
6139, // Europe/Vienna
6153, // Europe/Vilnius
6168, // Europe/Volgograd
6185, // Europe/Warsaw
6199, // Europe/Zagreb
6213, // Europe/Zaporozhye
6231, // Europe/Zurich
6245, // Indian/Antananarivo
6265, // Indian/Chagos
6279, // Indian/Christmas
6296, // Indian/Cocos
6309, // Indian/Comoro
6323, // Indian/Kerguelen
6340, // Indian/Mahe
6352, // Indian/Maldives
6368, // Indian/Mauritius
6385, // Indian/Mayotte
6400, // Indian/Reunion
6415, // Pacific/Apia
6428, // Pacific/Auckland
6445, // Pacific/Bougainville
6466, // Pacific/Chatham
6482, // Pacific/Chuuk
6496, // Pacific/Easter
6511, // Pacific/Efate
6525, // Pacific/Enderbury
6543, // Pacific/Fakaofo
6559, // Pacific/Fiji
6572, // Pacific/Funafuti
6589, // Pacific/Galapagos
6607, // Pacific/Gambier
6623, // Pacific/Guadalcanal
6643, // Pacific/Guam
6656, // Pacific/Honolulu
6673, // Pacific/Kiritimati
6692, // Pacific/Kosrae
6707, // Pacific/Kwajalein
6725, // Pacific/Majuro
6740, // Pacific/Marquesas
6758, // Pacific/Midway
6773, // Pacific/Nauru
6787, // Pacific/Niue
6800, // Pacific/Norfolk
6816, // Pacific/Noumea
6831, // Pacific/Pago_Pago
6849, // Pacific/Palau
6863, // Pacific/Pitcairn
6880, // Pacific/Pohnpei
6896, // Pacific/Port_Moresby
6917, // Pacific/Rarotonga
6935, // Pacific/Saipan
6950, // Pacific/Tahiti
6965, // Pacific/Tarawa
6980, // Pacific/Tongatapu
6998, // Pacific/Wake
7011, // Pacific/Wallis
3973, // Asia/Beirut
3985, // Asia/Bishkek
3998, // Asia/Brunei
4010, // Asia/Chita
4021, // Asia/Choibalsan
4037, // Asia/Colombo
4050, // Asia/Damascus
4064, // Asia/Dhaka
4075, // Asia/Dili
4085, // Asia/Dubai
4096, // Asia/Dushanbe
4110, // Asia/Famagusta
4125, // Asia/Gaza
4135, // Asia/Hebron
4147, // Asia/Ho_Chi_Minh
4164, // Asia/Hong_Kong
4179, // Asia/Hovd
4189, // Asia/Irkutsk
4202, // Asia/Jakarta
4215, // Asia/Jayapura
4229, // Asia/Jerusalem
4244, // Asia/Kabul
4255, // Asia/Kamchatka
4270, // Asia/Karachi
4283, // Asia/Kathmandu
4298, // Asia/Khandyga
4312, // Asia/Kolkata
4325, // Asia/Krasnoyarsk
4342, // Asia/Kuala_Lumpur
4360, // Asia/Kuching
4373, // Asia/Kuwait
4385, // Asia/Macau
4396, // Asia/Magadan
4409, // Asia/Makassar
4423, // Asia/Manila
4435, // Asia/Muscat
4447, // Asia/Nicosia
4460, // Asia/Novokuznetsk
4478, // Asia/Novosibirsk
4495, // Asia/Omsk
4505, // Asia/Oral
4515, // Asia/Phnom_Penh
4531, // Asia/Pontianak
4546, // Asia/Pyongyang
4561, // Asia/Qatar
4572, // Asia/Qostanay
4586, // Asia/Qyzylorda
4601, // Asia/Riyadh
4613, // Asia/Sakhalin
4627, // Asia/Samarkand
4642, // Asia/Seoul
4653, // Asia/Shanghai
4667, // Asia/Singapore
4682, // Asia/Srednekolymsk
4701, // Asia/Taipei
4713, // Asia/Tashkent
4727, // Asia/Tbilisi
4740, // Asia/Tehran
4752, // Asia/Thimphu
4765, // Asia/Tokyo
4776, // Asia/Tomsk
4787, // Asia/Ulaanbaatar
4804, // Asia/Urumqi
4816, // Asia/Ust-Nera
4830, // Asia/Vientiane
4845, // Asia/Vladivostok
4862, // Asia/Yakutsk
4875, // Asia/Yangon
4887, // Asia/Yekaterinburg
4906, // Asia/Yerevan
4919, // Atlantic/Azores
4935, // Atlantic/Bermuda
4952, // Atlantic/Canary
4968, // Atlantic/Cape_Verde
4988, // Atlantic/Faroe
5003, // Atlantic/Madeira
5020, // Atlantic/Reykjavik
5039, // Atlantic/South_Georgia
5062, // Atlantic/St_Helena
5081, // Atlantic/Stanley
5098, // Australia/Adelaide
5117, // Australia/Brisbane
5136, // Australia/Broken_Hill
5158, // Australia/Currie
5175, // Australia/Darwin
5192, // Australia/Eucla
5208, // Australia/Hobart
5225, // Australia/Lindeman
5244, // Australia/Lord_Howe
5264, // Australia/Melbourne
5284, // Australia/Perth
5300, // Australia/Sydney
5317, // Europe/Amsterdam
5334, // Europe/Andorra
5349, // Europe/Astrakhan
5366, // Europe/Athens
5380, // Europe/Belgrade
5396, // Europe/Berlin
5410, // Europe/Bratislava
5428, // Europe/Brussels
5444, // Europe/Bucharest
5461, // Europe/Budapest
5477, // Europe/Busingen
5493, // Europe/Chisinau
5509, // Europe/Copenhagen
5527, // Europe/Dublin
5541, // Europe/Gibraltar
5558, // Europe/Guernsey
5574, // Europe/Helsinki
5590, // Europe/Isle_of_Man
5609, // Europe/Istanbul
5625, // Europe/Jersey
5639, // Europe/Kaliningrad
5658, // Europe/Kiev
5670, // Europe/Kirov
5683, // Europe/Lisbon
5697, // Europe/Ljubljana
5714, // Europe/London
5728, // Europe/Luxembourg
5746, // Europe/Madrid
5760, // Europe/Malta
5773, // Europe/Mariehamn
5790, // Europe/Minsk
5803, // Europe/Monaco
5817, // Europe/Moscow
5831, // Europe/Oslo
5843, // Europe/Paris
5856, // Europe/Podgorica
5873, // Europe/Prague
5887, // Europe/Riga
5899, // Europe/Rome
5911, // Europe/Samara
5925, // Europe/San_Marino
5943, // Europe/Sarajevo
5959, // Europe/Saratov
5974, // Europe/Simferopol
5992, // Europe/Skopje
6006, // Europe/Sofia
6019, // Europe/Stockholm
6036, // Europe/Tallinn
6051, // Europe/Tirane
6065, // Europe/Ulyanovsk
6082, // Europe/Uzhgorod
6098, // Europe/Vaduz
6111, // Europe/Vatican
6126, // Europe/Vienna
6140, // Europe/Vilnius
6155, // Europe/Volgograd
6172, // Europe/Warsaw
6186, // Europe/Zagreb
6200, // Europe/Zaporozhye
6218, // Europe/Zurich
6232, // Indian/Antananarivo
6252, // Indian/Chagos
6266, // Indian/Christmas
6283, // Indian/Cocos
6296, // Indian/Comoro
6310, // Indian/Kerguelen
6327, // Indian/Mahe
6339, // Indian/Maldives
6355, // Indian/Mauritius
6372, // Indian/Mayotte
6387, // Indian/Reunion
6402, // Pacific/Apia
6415, // Pacific/Auckland
6432, // Pacific/Bougainville
6453, // Pacific/Chatham
6469, // Pacific/Chuuk
6483, // Pacific/Easter
6498, // Pacific/Efate
6512, // Pacific/Enderbury
6530, // Pacific/Fakaofo
6546, // Pacific/Fiji
6559, // Pacific/Funafuti
6576, // Pacific/Galapagos
6594, // Pacific/Gambier
6610, // Pacific/Guadalcanal
6630, // Pacific/Guam
6643, // Pacific/Honolulu
6660, // Pacific/Kiritimati
6679, // Pacific/Kosrae
6694, // Pacific/Kwajalein
6712, // Pacific/Majuro
6727, // Pacific/Marquesas
6745, // Pacific/Midway
6760, // Pacific/Nauru
6774, // Pacific/Niue
6787, // Pacific/Norfolk
6803, // Pacific/Noumea
6818, // Pacific/Pago_Pago
6836, // Pacific/Palau
6850, // Pacific/Pitcairn
6867, // Pacific/Pohnpei
6883, // Pacific/Port_Moresby
6904, // Pacific/Rarotonga
6922, // Pacific/Saipan
6937, // Pacific/Tahiti
6952, // Pacific/Tarawa
6967, // Pacific/Tongatapu
6985, // Pacific/Wake
6998, // Pacific/Wallis
};
static constexpr const CountryTimezoneMap country_timezone_map[] = {
......@@ -1320,7 +1318,6 @@ static constexpr const CountryId timezone_country_map[] = {
CountryId{"AZ"}, // Asia/Baku
CountryId{}, // Asia/Bangkok
CountryId{"RU"}, // Asia/Barnaul
CountryId{"CN"}, // Asia/Beijing
CountryId{"LB"}, // Asia/Beirut
CountryId{"KG"}, // Asia/Bishkek
CountryId{"BN"}, // Asia/Brunei
......
......@@ -239,7 +239,6 @@ enum class Tz : uint16_t {
Asia_Baku,
Asia_Bangkok,
Asia_Barnaul,
Asia_Beijing,
Asia_Beirut,
Asia_Bishkek,
Asia_Brunei,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment