Как мне заполнить список часовых поясов IANA / Olson из Noda Time?
Я использую NodaTime в приложении, и мне нужно, чтобы пользователь выбрал их часовой пояс из выпадающего списка. У меня есть следующие мягкие требования:
1) Список содержит только те варианты, которые являются разумно действительными для настоящего и ближайшего будущего для реальных мест. Исторические, неясные и общие часовые пояса должны быть отфильтрованы.
2) Список должен быть отсортирован сначала по смещению UTC, а затем по названию часового пояса. Надеемся, что это приводит их в порядок, который имеет значение для пользователя.
мы написали следующий код, который действительно работает, но нене имею именно то, что ям после. Фильтр, вероятно, нужно настроить, и яВместо этого смещение должно представлять базовое (не dst) смещение, а не текущее смещение.
Предложения? Рекомендации?
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);