Тип DateTimeOffset
может анализировать смещения этого формата, используя спецификатор zzz
. Таким образом, вы можете написать такую функцию, как:
static TimeSpan ParseOffset(string s)
{
return DateTimeOffset.ParseExact(s, "zzz", CultureInfo.InvariantCulture).Offset;
}
Другой подход, вы можете разобрать с TimeSpan.ParseExact
, если сначала уберите знак и обработаете его самостоятельно:
static TimeSpan ParseOffset(string s)
{
var ts = TimeSpan.ParseExact(s.Substring(1), @"hh\:mm", CultureInfo.InvariantCulture);
return s[0] == '-' ? ts.Negate() : ts;
}
Или, как показал Маниш в своем ответе, вы можете TimeSpan.Parse
попытаться выяснить строку. Работает, если сначала убрать знак +
.
static TimeSpan ParseOffset(string s)
{
return TimeSpan.Parse(s.Replace("+", ""), CultureInfo.InvariantCulture);
}