Не вижу встроенного способа сделать это. Класс TimeZoneInfo не имеет свойства или метода, который возвращает код страны. Смотри: https://docs.microsoft.com/en-us/dotnet/api/system.timezoneinfo?view=netframework-4.7.2
Поведение TimeZoneInfo также зависит от операционных систем, в которых он работает. Смотрите ниже:
Запуск следующего кода в NET Core 2.1 в Windows 10:
TimeZoneInfo localZone = TimeZoneInfo.Local;
Console.WriteLine("Local Time Zone ID: {0}", localZone.Id);
Console.WriteLine(" Display Name is: {0}.", localZone.DisplayName);
Console.WriteLine(" Standard name is: {0}.", localZone.StandardName);
Console.WriteLine(" Daylight saving name is: {0}.", localZone.DaylightName);
Дает вывод:
Local Time Zone ID: Central Europe Standard Time
Display Name is: (UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague.
Standard name is: Central Europe Standard Time.
Daylight saving name is: Central Europe Summer Time.
Запуск того же кода NET Core 2.1 на macOS High Sierra:
Local Time Zone ID: Europe/Budapest
Display Name is: GMT+01:00.
Standard name is: GMT+01:00.
Daylight saving name is: GMT+02:00.
Ближайшее приближение, которое вы можете реализовать:
Загрузить последнюю копию базы данных tz. Вы можете использовать https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Скачать копию кодов стран. В Википедии есть список: https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
Реализуйте код, который выполняет поиск в вашей базе данных TZ по имени TZ, например «Европа / Будапешт» Это дает вам код страны. Затем выполните поиск в вашей базе данных стран с помощью двухбуквенного кода страны, который даст вам название страны.
Этот метод не кроссплатформенный! И ваша заявка должна обновляться при изменении базы данных tz списка кодов стран.