Wie soll ich das Auffüllen einer Liste von IANA / Olson Zeitzonen von Noda Zeit?

Ich bin mit NodaTime in einer Anwendung, und ich brauche die Benutzer zu wählen Sie Ihre Zeitzone aus der dropdown-Liste. Ich habe die folgenden weichen Anforderungen:

1) Die Liste enthält nur Entscheidungen treffen, die vernünftigerweise gültig für die Gegenwart und nahe Zukunft für Reale Orte. Historische, obskure und allgemein Zeitzonen, die herausgefiltert werden soll.

2) Die Liste sortiert werden soll zuerst von der UTC-offset und dann von timezone name. Hoffentlich stellt Sie in einer Reihenfolge, die sinnvoll für die Nutzer.

Ich geschrieben habe folgenden code, der tatsächlich funktioniert, aber nicht genau das, was ich bin nach. Der filter muss wahrscheinlich angepasst werden, und ich hätte lieber den offset stellen die Basis (non-dst-offset, eher als der aktuelle offset.

Vorschläge? Empfehlungen?

var now = Instant.FromDateTimeUtc(DateTime.UtcNow);
var tzdb = DateTimeZoneProviders.Tzdb;
var list = from id in tzdb.Ids
           where id.Contains("/") && !id.StartsWith("etc", StringComparison.OrdinalIgnoreCase)
           let tz = tzdb[id]
           let offset = tz.GetOffsetFromUtc(now)
           orderby offset, id
           select new
           {
               Id = id,
               DisplayValue = string.Format("({0}) {1}", offset.ToString("+HH:mm", null), id)
           };

//ultimately we build a dropdown list, but for demo purposes you can just dump the results
foreach (var item in list)
    Console.WriteLine(item.DisplayValue);
Schreibe einen Kommentar