Ich habe ein Szenario, in dem ich einen Zeitzonenoffset (in Minuten) habe und die Zeitzone dafür bestimmen muss. Ich weiß, dass alle Daten nicht verfügbar sind (es kann z. B. mehrere Zeitzonen mit einem Offset von -240 Minuten geben), aber eine "beste Schätzung" ist akzeptabel.Wie kann ich eine Zeitzone anhand des UTC-Offsets ermitteln?
Mein erster Pass sah wie folgt aus:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Diese sorta funktioniert, aber ich brauche für die Sommerzeit zu berücksichtigen, die mich etwas weg zu werfen ist. Ich habe diese schreckliche Hack:
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Diese „gut genug“ in das funktioniert kann ich den Benutzer die richtige Zeit für sie zeige, wenn die Sommerzeit nicht wirksam ist, und ist etwa 70% richtig während DST. Trotzdem ... das ist ein schrecklicher Code für meine Augäpfel.
Gibt es einen besseren Weg, dies zu tun? Mehr Eleganz wäre gut und mehr Genauigkeit wäre noch besser.
aktualisiert
Technisch Ich habe Zugang zu allen Informationen Javascript in Bezug auf den Zeitpunkt bekommen. Ich habe eine Seite, auf der ich ein verstecktes Feld namens "Offset" platziert habe. Ich habe eine JQuery-Funktion, die das Offset-Feld mit der DateTime(). GetTimezoneOffset() füllt. Ich sehe zwar nichts auf dem DateTime-Objekt, das hilft, aber vielleicht werden dadurch andere Ideen eröffnet.
@Sailing Judo: Ich habe meiner Antwort einen Code hinzugefügt, mit dem Javascript einen universellen Zeitstempel in einen lokalen umwandeln kann. – Kip