Come indicato nei commenti della domanda, non sarai in grado di ottenere un singolo fuso orario per ogni paese. Ci sono troppi casi di paesi che hanno più fusi orari.
Che cosa si può fare è filtrare l'elenco di standard di IANA/Olson time zones giù a quelli disponibili all'interno di un determinato paese.
Un modo per fare questo in C# è con Noda Time:
IEnumerable<string> zoneIds = TzdbDateTimeZoneSource.Default.ZoneLocations
.Where(x => x.CountryCode == countryCode)
.Select(x => x.ZoneId);
passare una a due cifre ISO-3166 codice del paese, come ad esempio "AU"
per l'Australia. I risultati sono:
"Australia/Lord_Howe",
"Australia/Hobart",
"Australia/Currie",
"Australia/Melbourne",
"Australia/Sydney",
"Australia/Broken_Hill",
"Australia/Brisbane",
"Australia/Lindeman",
"Australia/Adelaide",
"Australia/Darwin",
"Australia/Perth",
"Australia/Eucla"
E se per qualche motivo vuoi identificatori fuso orario di Windows che è possibile utilizzare con l'oggetto TimeZoneInfo
, Noda tempo può mappare quelli troppo:
var source = TzdbDateTimeZoneSource.Default;
IEnumerable<string> windowsZoneIds = source.ZoneLocations
.Where(x => x.CountryCode == countryCode)
.Select(tz => source.WindowsMapping.MapZones
.FirstOrDefault(x => x.TzdbIds.Contains(
source.CanonicalIdMap.First(y => y.Value == tz.ZoneId).Key)))
.Where(x => x != null)
.Select(x => x.WindowsId)
.Distinct()
Anche in questo caso, chiamato con "AU"
per l'Australia restituisce:
"Tasmania Standard Time",
"AUS Eastern Standard Time",
"Cen. Australia Standard Time",
"E. Australia Standard Time",
"AUS Central Standard Time",
"W. Australia Standard Time"
Se vi state chiedendo su come affidabile questi dati è, il paese a tzid mappatura è parte dei dati del fuso orario IANA base stessa, nel file zone.tab. I dati di mappatura da IANA a Windows provengono da Unicode CLDR supplemental data. Non si avvicina a "ufficiale" di quello.
Cina. India. Ho corso. Brasile .... –
Che cos'è un "fuso orario predefinito" ??? La zona con la capitale di un paese? – elgonzo
E l'Australia con almeno tre fusi orari e alcuni stati, ma non tutti, hanno ora legale e Indiana negli Stati Uniti che utilizza almeno due fusi orari. –