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
Я согласен с Джерри Шенком, прочтите, пожалуйста, статью, которую он предложил.