Я работаю над алгоритмом в C# для вычисления прошлого DateTime на основе входной строки со следующими характеристиками:
Строка содержит целое число, сопровождаемое или 'D', 'M' или 'Y', такой как "1D" или "90M".
Выводом будет DateTime. Теперь минус соответствующее количество дней, месяцы или годы.
Проблема, которую я имею, то, что, если, например, я переключаю входную строку на Regex (D, M или Y) и вычитаю соответствующий TimeSpan из DateTime. Теперь, новый TimeSpan () конструктор не принимает месяцы или годы, только дни.
if (new Regex(@"[0-9]+D").IsMatch(value))
{
newDate = DateTime.Now - TimeSpan(Int32.Parse(value.Replace("D", "")), 0, 0);
}
Эта логика прекрасна, если входная строка находится в течение многих дней, но конструктор для TimeSpan не принимает месяцы или годы, и это было бы невероятно неточно, если бы я принял, каждый месяц имел 30 дней, или каждый год имел 365 дней.
У кого-либо есть мысли о том, как реализовать этот алгоритм?
Спасибо!
Чтобы вычесть месяцы, я создаю новый DateTime и просто оцениваю месяц / год. Таким образом, 1/2010 - 6 месяцев будет 6/2010 ... как только вы установили месяц / год, вы можете посмотреть на исходный компонент datetime day и убедиться, что он вписывается в месяц.
Это то, что я сделал. Год оценивался так же. Вычесть дни легко; используйте для этого компонент TimeSpan.
Помните, что вы также можете добавлять отрицательные суммы, и проверьте этот метод и этот .
Не могли бы вы попробовать использовать AddDays / AddMonths / AddYears , но с отрицательными числами?
Параметр значения может быть отрицательным или положительным.
А затем, возможно, просто реализуйте переключатель, чтобы применить соответствующий метод Add.
http://msdn.microsoft.com/en-us/library/3z48198e.aspx TimeSpan.TryParse принимает очень рядом с вашей строкой, если вы можете соответствовать ее форматированию, ИЛИ преобразовать из своего в его.