Самый простой подход - конвертировать в UTC, добавить туда 48 часов, а затем конвертировать обратно. Таким образом, вы применяете соответствующее смещение часового пояса в каждой точке. Например:
using System;
class Test
{
static void Main()
{
var test = new DateTimeOffset(new DateTime(2018, 10, 26, 20, 0, 0));
var test2 = test.AddHours(48);
var test3 = test.ToUniversalTime().AddHours(48).ToLocalTime();
Console.WriteLine(test2);
Console.WriteLine(test3);
}
}
Результаты в часовом поясе Лондона:
28/10/2018 20:00:00 +01:00
28/10/2018 19:00:00 +00:00
Обратите внимание, что в некоторых случаях первоначальное местное время может быть пропущено или неоднозначно - вам следует подумать, что делать дальше. Я лично (по понятным причинам) рекомендую вместо этого мой проект Noda Time , где есть больше типов для представления различных типов значений, с которыми вы будете работать. Решения, например, как справляться с пропущенными / неоднозначными временами, более очевидны, потому что у вас в основном есть , чтобы сделать их.