Advertisement
Guest User

IanaToWindows performance improvement

a guest
Sep 18th, 2015
660
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.98 KB | None | 0 0
  1. private static string IanaToWindows(string ianaZoneId)
  2. {
  3.     if (string.IsNullOrEmpty(ianaZoneId))
  4.         return null;
  5.  
  6.     var utcZones = new[] { "Etc/UTC", "Etc/UCT", "Etc/GMT" };
  7.     if (utcZones.Contains(ianaZoneId, StringComparer.Ordinal))
  8.         return "UTC";
  9.  
  10.     var tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.Default;
  11.  
  12.     // resolve any link, since the CLDR doesn't necessarily use canonical IDs
  13.     List<string> possibleZones = tzdbSource.CanonicalIdMap
  14.         .Where(x => x.Value.Equals(ianaZoneId, StringComparison.Ordinal))
  15.         .Select(x => x.Key)
  16.         .ToList();
  17.  
  18.     // resolve canonical zones as well
  19.     string canonical;
  20.     if (tzdbSource.CanonicalIdMap.TryGetValue(ianaZoneId, out canonical))
  21.     {
  22.         possibleZones.Add(canonical);
  23.         possibleZones.Add(ianaZoneId);
  24.     }
  25.  
  26.     // map the windows zone
  27.     var mappings = tzdbSource.WindowsMapping.MapZones;
  28.     var item = mappings.FirstOrDefault(x => x.TzdbIds.Any(possibleZones.Contains));
  29.     if (item == null)
  30.         return null;
  31.  
  32.     return item.WindowsId;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement