DateTime kennt seinen Zeitzonenversatz nicht. Es gibt keine integrierte Methode, um den Offset oder den Zeitzonennamen zurückzugeben (z. B. EAT, CEST, EST usw.).
Wie von anderen vorgeschlagen, können Sie Ihr Datum in UTC konvertieren:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
und dann nur die Differenz berechnen:
TimeSpan difference = localtime - utctime;
Sie können das DateTimeOffset auch einmal in ein anderes konvertieren:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Dies ist jedoch eine Art verlustbehaftete Komprimierung - der Offset allein kann Ihnen nicht sagen, um welche Zeitzone es sich handelt, da sich zwei verschiedene Länder in unterschiedlichen Zeitzonen befinden und nur für einen Teil des Jahres dieselbe Zeit haben (z. B. Südafrika und Europa). Beachten Sie auch, dass die Sommerzeit zu unterschiedlichen Zeitpunkten eingeführt werden kann (EST vs. CET - ein Unterschied von 3 Wochen).
Sie können den Namen Ihrer lokalen Systemzeitzone mithilfe der TimeZoneInfo-Klasse abrufen:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Ich stimme Gerrie Schenck zu, bitte lesen Sie den Artikel, den er vorgeschlagen hat.