Mam globalną stronę internetową, która przekazuje identyfikator strefy czasowej IANA na serwer i używa Noda Time do mapowania do strefy czasowej Windows w aplikacji internetowej # 5.noda czas iana mapowanie Etc/UTC na strefę czasową Windows
Urządzenie "Etc/UTC" jest przekazywane do serwera, ale Noda Time nie może zmapować go do strefy czasowej systemu Windows. Jak mogę odwzorować identyfikator strefy czasowej IANA?
public TimeZoneInfo GetTimeZoneByIanaId(string ianaTimeZoneId)
{
TzdbDateTimeZoneSource timeZoneSource = TzdbDateTimeZoneSource.Default;
IList<MapZone> zoneMaps = timeZoneSource.WindowsMapping.MapZones;
// resolve any link, since the CLDR doesn't necessarily use canonical IDs
IList<string> mapZoneIds = timeZoneSource.CanonicalIdMap.Where(map => map.Value.Equals(ianaTimeZoneId, StringComparison.OrdinalIgnoreCase)).Select(x => x.Key).ToList();
MapZone mapZone = zoneMaps.FirstOrDefault(zoneMap => zoneMap.TzdbIds.Any(mapZoneIds.Contains));
if (mapZone == null)
{
throw new TimeZoneNotFoundException("Unable to determine the clients timezone using the jsTimezoneDetect plugin");
}
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(mapZone.WindowsId);
if (timeZone == null)
{
throw new TimeZoneNotFoundException("Unable to determine the clients timezone from NodaTime");
}
return timeZone;
}
Patrząc na stronę https://code.google.com/p/noda-time/source/browse/data/cldr/windowsZones25.xml, wygląda na to, że nie ma mapowania UTC zdefiniowanego przez CLDR. Być może będziesz musiał po prostu zakodować ten kod :( –
Dobrze, dziękuję, tak, to kwestia wpisu, który nie jest obecny na mapie :( –