DateTime не знає свого зміщення часового поясу. Не існує вбудованого методу повернення зміщення або імені часового поясу (наприклад, EAT, CEST, EST тощо).
Як і запропоновано іншими, ви можете конвертувати дату в UTC:
DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();
а потім лише обчислити різницю:
TimeSpan difference = localtime - utctime;
Також ви можете перетворити один раз на інший, використовуючи DateTimeOffset:
DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));
Але це своєрідне стиснення втрат - одне зсув не може визначити, який це часовий пояс, оскільки дві різні країни можуть знаходитися в різних часових поясах і мати однаковий час лише частину року (наприклад, Південна Африка та Європа). Також майте на увазі, що літній літній час може бути запроваджено в різні дати (EST проти CET - 3-тижнева різниця).
Ви можете отримати назву часового поясу локальної системи за допомогою класу TimeZoneInfo:
TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName
Я згоден з Геррі Шенк, будь ласка, прочитайте запропоновану ним статтю.