DateTime no conoce su desfase de zona horaria. No hay un método incorporado para devolver el desplazamiento o el nombre de la zona horaria (por ejemplo, EAT, CEST, EST, etc.).
Como lo sugirieron otros, puede convertir su fecha a UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
y luego solo calcula la diferencia:
TimeSpan difference = localtime - utctime;
También puede convertir una vez a otra usando DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Pero esto es una especie de compresión con pérdidas: el desplazamiento por sí solo no puede decirle en qué zona horaria es, ya que dos países diferentes pueden estar en diferentes zonas horarias y tener la misma hora solo durante una parte del año (por ejemplo, Sudáfrica y Europa). Además, tenga en cuenta que el horario de verano puede introducirse en diferentes fechas (EST vs CET - una diferencia de 3 semanas).
Puede obtener el nombre de la zona horaria de su sistema local usando la clase TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Estoy de acuerdo con Gerrie Schenck, lea el artículo que sugirió.