Если ваше время действительно в формате ISO-8601 , то вы можете сделать это:
DateTime dt = DateTime.ParseExact("1800+0100", "HHmmzzz", null,
DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay); // 17:00:00
Но обратите внимание, что это (правильно) выводит "17:00:00 ", а не " 19:00:00 ".
Если ваша строка не в формате ISO-8601 - и " 1800 + 0100 " действительно предназначен для представления 19:00 по Гринвичу - тогда вам нужно будет проанализировать строку вручную или, возможно, предварительно обработать ее перед передачей в ParseExact
.Возможно что-то вроде этого:
string s = "1800+0100";
string temp = s.Substring(0, 4) + ((s[4] == '+') ? '-' : '+') + s.Substring(5);
DateTime dt = DateTime.ParseExact(temp, "HHmmzzz", null,
DateTimeStyles.AdjustToUniversal);
Console.WriteLine(dt.TimeOfDay); // 19:00:00