Ben mümkünse yansıma kullanarak önleyeceğini: MapTimeZoneId
zoneinfo içine, Windows saat diliminden eşleme yapar ... Ben ters yönde eşleme yapmak için yansıma başvurmadan sona erdi. Yaklaşan gelecekteki sürümlerle çalışma konusunda bahse girerim :)
Gelecek sürümler için bu özellik için bir özellik isteği göndermekten çekinmeyin, ancak şu an için ters sözlüğünüzü daha kararlı bir şekilde hazırlayacağım. yolu: elbette
// Note: this version lets you work with any IDateTimeZoneSource, although as the only
// other built-in source is BclDateTimeZoneSource, that may be less useful :)
private static IDictionary<string, string> LoadTimeZoneMap(IDateTimeZoneSource source)
{
var nodaToWindowsMap = new Dictionary<string, string>();
foreach (var bclZone in TimeZoneInfo.GetSystemTimeZones())
{
var nodaId = source.MapTimeZoneId(bclZone);
if (nodaId != null)
{
nodaToWindowsMap[nodaId] = bclZone.Id;
}
}
return nodaToWindowsMap;
}
, bu TZDB tüm zaman dilimlerini kapsamaz olacaktır. Aslında, kullandığımız CLDR bilgilerine dayanarak verebildiğimiz tüm bilgileri bile vermeyecek ... CLDR, her bir Windows ID için birden fazla eşleşme verir ve biz sadece birincisini saklarız. Daha fazlasını nasıl ortaya çıkaracağımıza, ama henüz başlamamıza çalıştık. Düşünceler, Noda Time posta listesine hoş geldiniz :)
Ayrıca, BCL ve TZDB bölgeleri arasında bir haritalama olması, aslında her şey için aynı sonuçları vereceği anlamına gelmediğinden, yalnızca mevcut en yakın eşleme olduğunu unutmayın.
Bu arada hangi IANA dosyasını kastediyorsunuz? Bir CLDR var biliyorum, ama IANA farklı bir biçimde bunu sağlar, bu ilginç olurdu ... –