DateTime non conosce la differenza di fuso orario. Non esiste un metodo integrato per restituire l'offset o il nome del fuso orario (ad esempio EAT, CEST, EST ecc.).
Come suggerito da altri, puoi convertire la tua data in UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
e quindi calcola solo la differenza:
TimeSpan difference = localtime - utctime;
Inoltre puoi convertire una volta in un'altra usando DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Ma questa è una sorta di compressione con perdita di dati: il solo offset non è in grado di dirti quale fuso orario è poiché due paesi diversi possono trovarsi in fusi orari diversi e avere lo stesso orario solo per una parte dell'anno (ad es. Sud Africa ed Europa). Inoltre, tieni presente che l'ora legale estiva può essere introdotta in date diverse (EST vs CET - una differenza di 3 settimane).
È possibile ottenere il nome del fuso orario del sistema locale utilizzando la classe TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Sono d'accordo con Gerrie Schenck, leggi l'articolo che ha suggerito.