Я получаю дату типа 1.01.2022 ч:00, м:00, с:00, мс:00
Как лучше всего получить дату в конце дня, например: 01.01.2022 ч: 23, м: 59, с: 59, мс: 999?
Я пробовал эти 2 способа:
var endOfDay = new TimeSpan(0, 23, 59, 59, 999);
time = time.Add(endOfDay);
и
time = time.AddDays(1).AddMilliseconds(-1);
Для чего вам нужно это значение? Какое отношение вычисление значения времени в конце дня имеет к тому, как вы получаете строковое представление даты и времени?
У меня есть средство выбора даты от dateFrom до dateTo и для dateTo. Я хочу установить время до конца дня для случая, когда пользователь выбирает одни и те же дни для dateFrom и dateTo.
Что я обычно делаю, так это полностью игнорирую временной аспект. В блоке кода, который фактически выполняет фильтрацию, я добавлю 1 день к экземпляру dateTo
DateTime, а затем использую less than
сравнение. Пример, если выбранный dateTo
был 2022-01-31
, то в коде, который использует значение, я сделаю dateTo = dateTo.AddDays(1);
и Where(x => x.EntityDate < dateTo)
Это устраняет все сомнения вплоть до разрешения одного тика. В приведенном ниже коде предположим, что dateAndTime
может включать ненулевой компонент времени.
dateAndTime.Date.AddDays(1).AddTicks(-1);
Этот
Хотя это работает, обычно лучше рассмотреть альтернативный дизайн, который вообще не зависит от компонента времени (например, использовать заданную дату в полночь следующего дня, чтобы действовать как виртуальный конец дня для заданной контрольной даты). ).
Если вы хотите просто распечатать диапазон, формат действия основан на мнении. Однако, если вы хотите проверить, находится ли какое-то время внутри дня или без него, сделайте это как (примечание >=
и <
)
if (timeOfQuestion >= day.Date && timeOfQuestion < day.Date.AddDays(1)) {
...
}
Использование инструкций типа endOfDays = time.AddDays(1).AddMilliseconds(-1)
опасно:
обратите внимание, что day.Date.AddMilliseconds(999.5)
- значение double
- должно быть в пределах дня.
Я выбираю второй путь, в основном потому, что считаю его более читабельным. Но ни один из них не является универсально лучшим. Возможно, вам следует объяснить, каковы ваши критерии наилучшего.