#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
.
Это имеет два преимущества:
- Пользователь не ограничен предопределенными интервалами
- Вы можете вычесть
TimeSpan
непосредственно из вашегоDateTime.Now
Если требуется ограничение на ограниченные интервалы, вы можете реализовать это в представлении / окне. Но все же это должен быть временной интервал.