vorrei evitare utilizzando la riflessione, se possibile. Non vorrei scommettere sul tuo approccio con le versioni future :)
Sentiti libero di presentare una richiesta di funzionalità per questa funzionalità per le versioni future, ma per il momento costruirò il dizionario inverso in una versione più stabile modo:
// 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;
}
Naturalmente, questo non coprirà tutti i fusi orari in TZDB. Infatti, non fornirà nemmeno tutte le informazioni che possiamo fornire in base alle informazioni CLDR che usiamo ... CLDR fornisce più mapping per ogni ID di Windows e al momento memorizziamo solo il primo. Abbiamo cercato di capire come esporne di più, ma non siamo ancora riusciti. I pensieri sono benvenuti nella mailing list di Noda Time :)
Si noti inoltre che, proprio perché esiste una mappatura tra le zone BCL e TZDB, non significa che effettivamente darà gli stessi risultati per tutto: è solo la mappatura più vicina disponibile.
fonte
2013-02-23 08:32:40
Quale file IANA intendi, tra l'altro? So che c'è un CLDR, ma se IANA fornisce questo in un formato diverso, sarebbe interessante ... –