2010-06-05 18 views
24

In der Datenbank speichern ich alle Datum/Uhrzeit in UTC..NET Get Zeitzone Offset von Zeitzone Name

Ich kenne Benutzer Zeitzone Name ("US Eastern Standard Time" zum Beispiel).

Um die korrekte Zeit anzuzeigen, dachte ich, dass ich den Zeitzonen-Offset des Benutzers zu UTC Datum/Zeit hinzufügen muss. Aber wie würde ich die Zeitzone um den Namen der Zeitzone versetzt bekommen?

Vielen Dank!

Antwort

37

Sie können TimeZoneInfo.FindSystemTimeZoneById verwenden, um die TimeZoneInfo Objekt zu erhalten das mitgelieferte Id verwenden, dann TimeZoneInfo.GetUtcOffset davon:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); 
TimeSpan offset = tzi.GetUtcOffset(myDateTime); 
+0

Das hat mein Problem gelöst. Danke! –

+0

Das scheint bei mir nicht zu funktionieren. Momentan ist es Sommerzeit in der Zone "E. Australia Standard Time", also ist ihre Zeit GMT + 11. Wenn ich dies jedoch ausführe, erhalte ich ein Ergebnis von 10 Stunden. Es sollte 11 sein. Code ist: TimeZoneInfo.FindSystemTimeZoneById ("E. Australia Standardzeit"). GetUtcOffset (Now.ToUniversalTime) .Hours. Was mache ich falsch? –

+0

@ ingredient_15939 - Möglicherweise nichts falsch. Haben Sie überprüft, ob auf dem Computer, auf dem dieser Computer ausgeführt wird, die Sommerzeit richtig eingestellt ist? – Oded

4

Sie können die Methode TimeZoneInfo der Klasse GetSystemTimeZones() verwenden, um die Liste aller auf Ihrem Server konfigurierten Zeitzonen abzurufen und sie mit der von Ihrem Client übereinzustimmen.

Warum haben Sie Zeitzonen im Format "US Eastern Standard Time"? Woher kommt das?

+0

Tolle Idee, wird es jetzt versuchen :) ich ein Dropdown mit Sammlung von GetSystemTimeZones() –

+0

vielmehr das Drop-down mit dem Id/string jedes 'TimeZone' Objekt zurückgegeben bin bevölkern als bevölkern in die Sammlung, warum nicht die tatsächlichen Objekte stattdessen als 'Item's im Drop-Down-Menü hinzufügen? Auf diese Weise können Sie, wenn das Dropdown-Menü geändert wird, einfach einen Verweis auf das TimeZoneInfo-Objekt abrufen, indem Sie '(TimeZoneInfo) myDropDown.SelectedItem' verwenden. Dann müssten Sie' .FindSystemTimeZoneById' nicht jedes Mal aufrufen Objekt. –

2

Anstatt einige manuelle Zugabe tun Sie die Vorteile der ConvertTime Methode der TimeZoneInfo die Umwandlung wird Griff nehmen sollte Ihr Datum basierend auf der Zeitzone, die Sie angeben.

var localizedDateTime = TimeZoneInfo.ConvertTime(yourDateTime, localTimeZoneInfo); 
+0

Ausgezeichneter Rat. –

Verwandte Themen