Вычитание неизвестного интервала из datetime

#c# #date #time #automation

#c# #Дата #время #автоматизация

Вопрос:

Я настраиваю систему для сбора данных из базы данных на основе введенной пользователем даты начала и даты окончания. Система будет собирать данные, усредненные за интервал (например, 1 час, 6 часов или один день). Если пользователь не вводит начальную или конечную дату, я бы хотел, чтобы программа установила дату начала на текущее время минус интервал.

В настоящее время пользователь вводит интервал в следующем формате.

 1m = 1 minute
1h = 1 hour
12h = 12 hours
3d = 3 days
  

Таким образом, эти значения не форматируются как datetime. Я мог бы взять текущее datetime и вычесть его на минуты, часы или дни в зависимости от добавленного значения (разделение по числу), но это означало бы много if утверждений. Что мне действительно хотелось бы, так это метод вычитания datetime на произвольное значение У кого-нибудь есть лучшее решение?

Комментарии:

1. Является ли ваше приложение формой Windows?

2. Посмотрите различные FromXxx статические методы для TimeSpan типа. Вы можете сказать DateTime.Now-TimeSpan.FromHours(12) и получить время двенадцатичасовой давности

3. Эй, Flydog, это вариант, но это означало бы, что мне придется выписывать операторы if для минут, часов и дней.

Ответ №1:

Вместо предоставления предопределенных временных интервалов (которые реализуются, например, с помощью отдельного типа / перечисления), гораздо проще позволить пользователю свободно указывать TimeSpan .

Это имеет два преимущества:

  1. Пользователь не ограничен предопределенными интервалами
  2. Вы можете вычесть TimeSpan непосредственно из вашего DateTime.Now

Если требуется ограничение на ограниченные интервалы, вы можете реализовать это в представлении / окне. Но все же это должен быть временной интервал.