Я получаю даты из базы данных, и для каждой даты я хочу изменить время вперед, начиная с DateTime, который был получен из базы данных, до тех пор, пока я не достигну определенного фиксированного времени (Y). Однако (Y) может быть на следующий день.
Например, если дата из базы данных - [06.06.2017, 5:00:00 AM], а заданное фиксированное время - 22:00, тогда я хочу получить [06.07.2017 10:00: 00:00].
Однако, если фиксированное время - 02:00, то я хочу получить [7/7/2017 02:00:00 AM] (обратите внимание, что дата увеличилась на единицу)
Примечание: код выполняется, но я изменил код, чтобы сделать его короче и более понятным. Таким образом, могут быть синтаксические или орфографические ошибки.
Мое первое решение было примерно таким:
private DateTime setTimeForeward(DateTime date) {
DateTime today = DateTime.ParseExact(FixedTime, "hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan difference = today.TimeOfDay - date.TimeOfDay;
return date + difference;
}
Это не сработало, как ожидалось, когда фиксированное время - 02:00. Разница становится отрицательной (она не идет круглосуточно), и дата будет [6/7/2017 02:00:00 AM].
Я получил следующий код
private DateTime setTimeForeward(DateTime date) {
DateTime today = DateTime.ParseExact(FixedTime "hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan difference = today.TimeOfDay - date.TimeOfDay;
if (difference.Hours < 0) {
difference += new TimeSpan(24, 0, 0);
}
return date + difference;
}
Я не уверен, что моя функция логически верна, и я чувствую, что переосмыслил ее Кроме того, я не уверен, есть ли лучший способ или встроенная функция, которая делает то, что я хочу для меня. По сути, я ищу правильное и элегантное решение.
Большое спасибо в продвинутом.