Вычисление прошлой даты и времени в C#

Я работаю над алгоритмом в 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 дней.

У кого-либо есть мысли о том, как реализовать этот алгоритм?

Спасибо!

6
задан Nick Vaccaro 1 March 2010 в 20:58
поделиться

5 ответов

DateTime имеет методы AddMonths , AddDays и AddYears . Используйте их с минусом для вычитания

15
ответ дан 8 December 2019 в 12:58
поделиться

Чтобы вычесть месяцы, я создаю новый DateTime и просто оцениваю месяц / год. Таким образом, 1/2010 - 6 месяцев будет 6/2010 ... как только вы установили месяц / год, вы можете посмотреть на исходный компонент datetime day и убедиться, что он вписывается в месяц.

Это то, что я сделал. Год оценивался так же. Вычесть дни легко; используйте для этого компонент TimeSpan.

0
ответ дан 8 December 2019 в 12:58
поделиться

Помните, что вы также можете добавлять отрицательные суммы, и проверьте этот метод и этот .

0
ответ дан 8 December 2019 в 12:58
поделиться

Не могли бы вы попробовать использовать AddDays / AddMonths / AddYears , но с отрицательными числами?

Из Метод DateTime.AddDays

Параметр значения может быть отрицательным или положительным.

А затем, возможно, просто реализуйте переключатель, чтобы применить соответствующий метод Add.

3
ответ дан 8 December 2019 в 12:58
поделиться

http://msdn.microsoft.com/en-us/library/3z48198e.aspx TimeSpan.TryParse принимает очень рядом с вашей строкой, если вы можете соответствовать ее форматированию, ИЛИ преобразовать из своего в его.

0
ответ дан 8 December 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: