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);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Noda-Zeit 1.1 der zone.Registerkarte Daten, so können Sie nun Folgendes tun:
Alternativer Ansatz
Anstatt einer drop-down-an alle, die Sie verwenden können, eine map-basierten Zeitzone picker.
Immer das standard-offset wird einfach
tz.GetZoneInterval(now).StandardOffset
. Dass Ihnen die "aktuelle" standard-offset (es ist möglich, eine zone im Laufe der Zeit ändern).Den filtern kann für Sie geeignet - ich möchte das nicht sicher sagen. Es ist sicherlich nicht ideal darin, dass die IDs sind nicht wirklich entwickelt, für die Anzeige. Sie idealerweise möchten, verwenden Sie die Unicode CLDR "Beispiel" Orte, aber wir haben keine CLDR-integration auf, die vorne im moment.