Ошибка DateTime Вычитание от 0 часов

Используя C# DateTime, я хотел бы вычесть время после 0 (или полуночи). Тем не менее, я получаю ошибку при этом. Я пытаюсь создать временную шкалу, где вы можете увеличивать и уменьшать масштаб и прокручивать время. Я получаю следующую ошибку: "Добавленное или вычтенное значение приводит к непредставляемому DateTime".

Я думаю, DateTime не знает, как обернуть от 0 до 23? Как мне обойти это?

3 ответа

Решение

Если вычесть TimeSpan из DateTimeЭто будет "обернуться" после полуночи:

> var d1 = DateTime.Parse("4/11/2012 12:30:00 AM");
> var d2 = d1.Subtract(new TimeSpan(1, 15, 0));
> 
> d2
[4/10/2012 11:15:00 PM]

Я предполагаю, что вы используете дату, которая начинается в DateTime.MinValue, Если вы вычтите время так, чтобы оно прошло раньше DateTime.MinValueвы получите это исключение.

// This is equal to DateTime.MinValue - maybe you're doing this?
DateTime date = new DateTime();
// Bang
date = date.AddHours(-1);

Если вам действительно нужно представление "просто время", подумайте об использовании Noda Time, моего псевдопорта Joda Time с более богатой системой типов, чем просто DateTime,

Вычитание 5 минут из TimeSpan, установленного на полночь, дает -00:05. В результате получается интервал времени 23:55, а не -00:05.

      DateTime.Today.Subtract(TimeSpan.FromMinutes(5)).TimeOfDay;
Другие вопросы по тегам