Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private static string IanaToWindows(string ianaZoneId)
- {
- if (string.IsNullOrEmpty(ianaZoneId))
- return null;
- var utcZones = new[] { "Etc/UTC", "Etc/UCT", "Etc/GMT" };
- if (utcZones.Contains(ianaZoneId, StringComparer.Ordinal))
- return "UTC";
- var tzdbSource = NodaTime.TimeZones.TzdbDateTimeZoneSource.Default;
- // resolve any link, since the CLDR doesn't necessarily use canonical IDs
- List<string> possibleZones = tzdbSource.CanonicalIdMap
- .Where(x => x.Value.Equals(ianaZoneId, StringComparison.Ordinal))
- .Select(x => x.Key)
- .ToList();
- // resolve canonical zones as well
- string canonical;
- if (tzdbSource.CanonicalIdMap.TryGetValue(ianaZoneId, out canonical))
- {
- possibleZones.Add(canonical);
- possibleZones.Add(ianaZoneId);
- }
- // map the windows zone
- var mappings = tzdbSource.WindowsMapping.MapZones;
- var item = mappings.FirstOrDefault(x => x.TzdbIds.Any(possibleZones.Contains));
- if (item == null)
- return null;
- return item.WindowsId;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement