Вы должны получить разницу между DateTime.UtcNow и DateTime.Now
var now = DateTime.Now;
var utcNow = now.ToUniversalTime();
var ts = utcNow - now;
Если вы сохраняете смещение, обычно выгодно сохранять все даты в UTC (особенно в дБ), чтобы вам не приходилось иметь дело со смещениями. Вы просто конвертируете их перед отображением, но выполняете все вычисления в формате UTC.
Изменить: Если у вас есть объект TimeZone, вы можете преобразовать дату UTC в местное время для этого часового пояса.
TimeZone.CurrentTimeZone.ToLocalTime()
OR
DateTime dt = TimeZoneInfo.ConvertTimeFromUtc()
Вот пример кода, в котором будет указана дата во всех часовых поясах.
var dt = new DateTime(2011, 5, 21, 11, 0, 0);
foreach (var tzi in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(string.Format("Time in {0} is {1}", tzi.DisplayName, TimeZoneInfo.ConvertTimeFromUtc(dt, tzi)));
}