Проблема более абстрактна. Как уже упоминалось, в .NET есть два типа - DateTime
и TimeSpan
. Тип DateTime
представляет определенный момент времени. Это не интервал времени. Это определенное место во все времена с момента рождения Вселенной. Даже если вы установите компоненты год / месяц / день равными 0, они все равно будут представлять некоторый абсолютный момент времени. Не долго.
С другой стороны, TimeSpan
представляет некоторый интервал. 1 минута, 2 дня, что угодно. НЕ указано, КОГДА, КАК ДОЛГО.
Таким образом, если бы вы вычли два объекта DateTime, вы бы получили объект TimeSpan, который указывает, сколько времени между ними. И если вы добавите TimeSpan к DateTime, вы получите другой DateTime. Но вы не можете добавить DateTime к другому DateTime - это не имеет смысла.
Мне кажется, что вы должны работать с TimeSpan
s все время, потому что вы имеете дело с отрезками времени, а не с абсолютными точками во времени. Если вы получаете эти длины из вашего источника как DateTime, то это на самом деле не правильно, и вы должны как-то преобразовать их в TimeSpan
s. Метод синтаксического анализа является одним из предложенных способов, но вы также можете попытаться вычесть из него ноль DateTime
. Это может быть быстрее и более независимым от культуры.