Ich verwende NodaTime in einer Anwendung, und ich brauche den Benutzer ihre Zeitzone aus einer Dropdown-Liste auswählen. Ich habe die folgenden weichen Anforderungen:Wie sollte ich eine Liste der IANA/Olson-Zeitzonen von Noda Time ausfüllen?
1) Die Liste enthält nur Auswahlmöglichkeiten, die für die Gegenwart und nahe Zukunft für reale Orte vernünftig gültig sind. Historische, obskure und allgemeine Zeitzonen sollten herausgefiltert werden.
2) Die Liste sollte zuerst nach UTC-Offset und dann nach Zeitzonenname sortiert werden. Dies bringt sie hoffentlich in eine Reihenfolge, die für den Benutzer von Bedeutung ist.
Ich habe den folgenden Code geschrieben, der tatsächlich funktioniert, aber nicht genau das, was ich habe. Der Filter muss wahrscheinlich angepasst werden, und ich möchte lieber, dass der Offset den Basis-Offset (nicht-dst) und nicht den aktuellen Offset darstellt.
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);
Gibt es eine saubere Art und Weise historische Zeitzonen, um herauszufiltern? Die TZ-Datenbank hat From- und To-Daten, für die Zeitzonen gültig sind. Stellt Noda das in irgendeiner Weise bloß? –
@MattJohnson: Nein - welches Stück von TZDB macht das frei? Ich muss gestehen, dass ich das Format noch nie richtig verstanden habe, aber wenn es etwas ist, das wir hinzufügen können, tun wir das vielleicht (aber wahrscheinlich nicht für 1.0). (From und To sind normalerweise für bestimmte Regeln innerhalb einer Zeitzone, und ich dachte, dass die letzte Regel immer ein To von "max" hatte.) –
Ich bin über diese Seite gestolpert http://69.36.11.139/tzdb/tz-how- to.html was die Dinge ziemlich gut erklärt. Die Regeleinträge scheinen die Daten zu haben, die ich benötigen würde. –