DateTime ne connaît pas son décalage de fuseau horaire. Il n'y a pas de méthode intégrée pour renvoyer le décalage ou le nom du fuseau horaire (par exemple EAT, CEST, EST, etc.).
Comme suggéré par d'autres, vous pouvez convertir votre date en UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
puis calculez uniquement la différence:
TimeSpan difference = localtime - utctime;
Vous pouvez également convertir une heure en une autre en utilisant DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Mais c'est une sorte de compression avec perte - le décalage seul ne peut pas vous dire de quel fuseau horaire il s'agit car deux pays différents peuvent être dans des fuseaux horaires différents et avoir la même heure seulement pendant une partie de l'année (par exemple, l'Afrique du Sud et l'Europe). Sachez également que l'heure d'été peut être introduite à des dates différentes (HNE vs HEC - une différence de 3 semaines).
Vous pouvez obtenir le nom de votre fuseau horaire système local à l'aide de la classe TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Je suis d'accord avec Gerrie Schenck, veuillez lire l'article qu'il a suggéré.