217#if qStroika_Foundation_Common_Platform_POSIX
222 DbgTrace (
"Ignoring missing ID from /etc/timezone"_f);
231 if (not result.
fID.has_value ()) {
235 DataExchange::INI::Profile p = DataExchange::INI::Reader{}.ReadProfile (IO::FileSystem::FileInputStream::New (
"/etc/sysconfig/clock"sv));
236 if (
auto o = p.fUnnamedSection.fProperties.Lookup (
"ZONE"sv)) {
241 DbgTrace (
"Missing Zone ID from /etc/sysconfig/clock"_f);
246 if (not result.
fID.has_value ()) {
254 static const Mapping<String, String> kUNIXTZAbbrev2OlsonName_ = {
255 KeyValuePair<String, String> {
"CST"sv,
"America/Chicago"sv },
256 KeyValuePair<String, String> {
"CDT"sv,
"America/Chicago"sv },
257 KeyValuePair<String, String> {
"CST6CDT"sv,
"America/Chicago"sv },
258 KeyValuePair<String, String> {
"EDT" sv,
"America/New_York"sv },
259 KeyValuePair<String, String> {
"EST"sv,
"America/New_York"sv },
260 KeyValuePair<String, String> {
"EST5EDT"sv,
"America/New_York"sv },
261 KeyValuePair<String, String> {
"PDT"sv,
"America/Los_Angeles"sv },
262 KeyValuePair<String, String> {
"PST"sv,
"America/Los_Angeles"sv },
263 KeyValuePair<String, String> {
"PDT8PST"sv,
"America/Los_Angeles"sv },
265 result.
fID = kUNIXTZAbbrev2OlsonName_.LookupValue (tzAbbrev, tzAbbrev);
268 DbgTrace (
"Ignoring missing ID from date +%Z");
272 if (not result.
fID.has_value ()) {
279 result.fStandardTime.fBiasInMinutesFromUTC = -GetLocaltimeToGMTOffset_ (
false) / 60;
282 result.fDaylightSavingsTime.fBiasInMinutesFromUTC = -GetLocaltimeToGMTOffset_ (
true) / 60;
283#elif qStroika_Foundation_Common_Platform_Windows
287 static const Mapping<String, String> kWinDoze2OlsonName_ = {
288 KeyValuePair<String, String>{
"Afghanistan Standard Time"sv,
"Asia/Kabul"sv},
289 KeyValuePair<String, String>{
"Alaskan Standard Time"sv,
"America/Juneau"sv},
290 KeyValuePair<String, String>{
"Arab Standard Time"sv,
"Asia/Riyadh"sv},
291 KeyValuePair<String, String>{
"Arabian Standard Time"sv,
"Asia/Muscat"sv},
292 KeyValuePair<String, String>{
"Arabic Standard Time"sv,
"Asia/Baghdad"sv},
293 KeyValuePair<String, String>{
"Argentina Standard Time"sv,
"America/Rosario"sv},
294 KeyValuePair<String, String>{
"Atlantic Standard Time"sv,
"America/Halifax"sv},
295 KeyValuePair<String, String>{
"AUS Central Standard Time"sv,
"Australia/Darwin"sv},
296 KeyValuePair<String, String>{
"AUS Eastern Standard Time"sv,
"Australia/Sydney"sv},
297 KeyValuePair<String, String>{
"Azerbaijan Standard Time"sv,
"Asia/Baku"sv},
298 KeyValuePair<String, String>{
"Azores Standard Time"sv,
"Atlantic/Azores"sv},
299 KeyValuePair<String, String>{
"Bahia Standard Time"sv,
"America/Maceio"sv},
300 KeyValuePair<String, String>{
"Bangladesh Standard Time"sv,
"Asia/Dhaka"sv},
301 KeyValuePair<String, String>{
"Canada Central Standard Time"sv,
"America/Swift_Current"sv},
302 KeyValuePair<String, String>{
"Cape Verde Standard Time"sv,
"Atlantic/Cape_Verde"sv},
303 KeyValuePair<String, String>{
"Caucasus Standard Time"sv,
"Asia/Yerevan"sv},
304 KeyValuePair<String, String>{
"Cen. Australia Standard Time"sv,
"Australia/Adelaide"sv},
305 KeyValuePair<String, String>{
"Central America Standard Time"sv,
"America/Tegucigalpa"sv},
306 KeyValuePair<String, String>{
"Central Asia Standard Time"sv,
"Asia/Almaty"sv},
307 KeyValuePair<String, String>{
"Central Brazilian Standard Time"sv,
"America/Cuiaba"sv},
308 KeyValuePair<String, String>{
"Central Europe Standard Time"sv,
"Europe/Prague"sv},
309 KeyValuePair<String, String>{
"Central European Standard Time"sv,
"Europe/Skopje"sv},
310 KeyValuePair<String, String>{
"Central Pacific Standard Time"sv,
"Pacific/Guadalcanal"sv},
311 KeyValuePair<String, String>{
"Central Standard Time"sv,
"America/Chicago"sv},
312 KeyValuePair<String, String>{
"Central Standard Time (Mexico)"sv,
"America/Monterrey"sv},
313 KeyValuePair<String, String>{
"China Standard Time"sv,
"Asia/Urumqi"sv},
314 KeyValuePair<String, String>{
"E. Africa Standard Time"sv,
"Africa/Nairobi"sv},
315 KeyValuePair<String, String>{
"E. Australia Standard Time"sv,
"Australia/Brisbane"sv},
316 KeyValuePair<String, String>{
"E. Europe Standard Time"sv,
"Europe/Bucharest"sv},
317 KeyValuePair<String, String>{
"E. South America Standard Time"sv,
"America/Sao_Paulo"sv},
318 KeyValuePair<String, String>{
"Eastern Standard Time"sv,
"America/New_York"sv},
319 KeyValuePair<String, String>{
"Egypt Standard Time"sv,
"Africa/Cairo"sv},
320 KeyValuePair<String, String>{
"Ekaterinburg Standard Time"sv,
"Asia/Yekaterinburg"sv},
321 KeyValuePair<String, String>{
"Fiji Standard Time"sv,
"Pacific/Fiji"sv},
322 KeyValuePair<String, String>{
"FLE Standard Time"sv,
"Europe/Helsinki"sv},
323 KeyValuePair<String, String>{
"Georgian Standard Time"sv,
"Asia/Tbilisi"sv},
324 KeyValuePair<String, String>{
"GMT Standard Time"sv,
"Europe/London"sv},
325 KeyValuePair<String, String>{
"Greenland Standard Time"sv,
"America/Godthab"sv},
326 KeyValuePair<String, String>{
"Greenwich Standard Time"sv,
"Atlantic/Reykjavik"sv},
327 KeyValuePair<String, String>{
"GTB Standard Time"sv,
"Europe/Bucharest"sv},
328 KeyValuePair<String, String>{
"Hawaiian Standard Time"sv,
"Pacific/Honolulu"sv},
329 KeyValuePair<String, String>{
"India Standard Time"sv,
"Asia/Calcutta"sv},
330 KeyValuePair<String, String>{
"Iran Standard Time"sv,
"Asia/Tehran"sv},
331 KeyValuePair<String, String>{
"Jerusalem Standard Time"sv,
"Asia/Jerusalem"sv},
332 KeyValuePair<String, String>{
"Jordan Standard Time"sv,
"Asia/Amman"sv},
333 KeyValuePair<String, String>{
"Kaliningrad Standard Time"sv,
"Europe/Kaliningrad"sv},
334 KeyValuePair<String, String>{
"Korea Standard Time"sv,
"Asia/Seoul"sv},
335 KeyValuePair<String, String>{
"Libya Standard Time"sv,
"Africa/Tripoli"sv},
336 KeyValuePair<String, String>{
"Magadan Standard Time"sv,
"Asia/Magadan"sv},
337 KeyValuePair<String, String>{
"Mauritius Standard Time"sv,
"Indian/Mauritius"sv},
338 KeyValuePair<String, String>{
"Middle East Standard Time"sv,
"Asia/Beirut"sv},
339 KeyValuePair<String, String>{
"Montevideo Standard Time"sv,
"America/Montevideo"sv},
340 KeyValuePair<String, String>{
"Morocco Standard Time"sv,
"Africa/Casablanca"sv},
341 KeyValuePair<String, String>{
"Mountain Standard Time"sv,
"America/Denver"sv},
342 KeyValuePair<String, String>{
"Mountain Standard Time (Mexico)"sv,
"America/Mazatlan"sv},
343 KeyValuePair<String, String>{
"Myanmar Standard Time"sv,
"Asia/Rangoon"sv},
344 KeyValuePair<String, String>{
"N. Central Asia Standard Time"sv,
"Asia/Novosibirsk"sv},
345 KeyValuePair<String, String>{
"Namibia Standard Time"sv,
"Africa/Windhoek"sv},
346 KeyValuePair<String, String>{
"Nepal Standard Time"sv,
"Asia/Katmandu"sv},
347 KeyValuePair<String, String>{
"New Zealand Standard Time"sv,
"Pacific/Auckland"sv},
348 KeyValuePair<String, String>{
"Newfoundland Standard Time"sv,
"America/St_Johns"sv},
349 KeyValuePair<String, String>{
"North Asia East Standard Time"sv,
"Asia/Irkutsk"sv},
350 KeyValuePair<String, String>{
"North Asia Standard Time"sv,
"Asia/Krasnoyarsk"sv},
351 KeyValuePair<String, String>{
"Pacific SA Standard Time"sv,
"America/Santiago"sv},
352 KeyValuePair<String, String>{
"Pacific Standard Time"sv,
"America/Los_Angeles"sv},
353 KeyValuePair<String, String>{
"Pacific Standard Time (Mexico)"sv,
"America/Tijuana"sv},
354 KeyValuePair<String, String>{
"Pakistan Standard Time"sv,
"Asia/Karachi"sv},
355 KeyValuePair<String, String>{
"Paraguay Standard Time"sv,
"America/Asuncion"sv},
356 KeyValuePair<String, String>{
"Romance Standard Time"sv,
"Europe/Paris"sv},
357 KeyValuePair<String, String>{
"Russian Standard Time"sv,
"Europe/Moscow"sv},
358 KeyValuePair<String, String>{
"SA Eastern Standard Time"sv,
"America/Cayenne"sv},
359 KeyValuePair<String, String>{
"SA Pacific Standard Time"sv,
"America/Lima"sv},
360 KeyValuePair<String, String>{
"SA Western Standard Time"sv,
"America/La_Paz"sv},
361 KeyValuePair<String, String>{
"SE Asia Standard Time"sv,
"Asia/Jakarta"sv},
362 KeyValuePair<String, String>{
"Malay Peninsula Standard Time"sv,
"Asia/Singapore"sv},
363 KeyValuePair<String, String>{
"South Africa Standard Time"sv,
"Africa/Harare"sv},
364 KeyValuePair<String, String>{
"Syria Standard Time"sv,
"Asia/Damascus"sv},
365 KeyValuePair<String, String>{
"Taipei Standard Time"sv,
"Asia/Taipei"sv},
366 KeyValuePair<String, String>{
"Tasmania Standard Time"sv,
"Australia/Hobart"sv},
367 KeyValuePair<String, String>{
"Tokyo Standard Time"sv,
"Asia/Tokyo"sv},
368 KeyValuePair<String, String>{
"Tonga Standard Time"sv,
"Pacific/Tongatapu"sv},
369 KeyValuePair<String, String>{
"Turkey Standard Time"sv,
"Asia/Istanbul"sv},
370 KeyValuePair<String, String>{
"Ulaanbaatar Standard Time"sv,
"Asia/Ulaanbaatar"sv},
371 KeyValuePair<String, String>{
"US Eastern Standard Time"sv,
"America/Indianapolis"sv},
372 KeyValuePair<String, String>{
"US Mountain Standard Time"sv,
"America/Denver"sv},
373 KeyValuePair<String, String>{
"Venezuela Standard Time"sv,
"America/Caracas"sv},
374 KeyValuePair<String, String>{
"Vladivostok Standard Time"sv,
"Asia/Vladivostok"sv},
375 KeyValuePair<String, String>{
"W. Australia Standard Time"sv,
"Australia/Perth"sv},
376 KeyValuePair<String, String>{
"W. Central Africa Standard Time"sv,
"Africa/Brazzaville"sv},
377 KeyValuePair<String, String>{
"W. Europe Standard Time"sv,
"Europe/Vienna"sv},
378 KeyValuePair<String, String>{
"West Asia Standard Time"sv,
"Asia/Tashkent"sv},
379 KeyValuePair<String, String>{
"West Pacific Standard Time"sv,
"Pacific/Port_Moresby"sv},
380 KeyValuePair<String, String>{
"Yakutsk Standard Time"sv,
"Asia/Yakutsk"sv},
382 TIME_ZONE_INFORMATION tzInfo{};
383 (void)::GetTimeZoneInformation (&tzInfo);
384 result.fStandardTime.fAbbreviation =
String{tzInfo.StandardName};
385 result.fStandardTime.fName =
String{tzInfo.StandardName};
386 result.fStandardTime.fBiasInMinutesFromUTC = -(tzInfo.StandardBias + tzInfo.Bias);
387 result.fDaylightSavingsTime.fAbbreviation =
String{tzInfo.DaylightName};
388 result.fDaylightSavingsTime.fName =
String{tzInfo.DaylightName};
389 result.fDaylightSavingsTime.fBiasInMinutesFromUTC = -(tzInfo.DaylightBias + tzInfo.Bias);
390 result.
fID = kWinDoze2OlsonName_.LookupValue (tzInfo.StandardName, tzInfo.StandardName);