2012-04-11 2 views
0

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

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

+11

Пожалуйста, разместите свой код, чтобы мы могли видеть, что вы делаете. – Oded

+1

Добро пожаловать в stackoverflow. Fyi, вопросы без достаточной информации имеют тенденцию закрываться или проголосовать. По возможности обязательно включите [SSCCE] (http://sscce.org/). Это облегчает другим, чтобы помочь вам понять проблему. – Leigh

ответ

2

Если вычесть 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] 
+0

Если это не меньше, чем 'DateTime.MinValue', как сказал Джон Скит в [его ответе] (http://stackoverflow.com/a/10113564/1583). – Oded

+1

Правильно, но в каком сценарии вы хотели бы представить дату/время меньше, чем '01/01/0001 00: 00: 00'? Если вам нужно 'DateTime' для этого, у вас скорее всего возникнут проблемы с дизайном. – qJake

+0

Не знаю. Но без дополнительной информации от OP мы не знаем, что предпринимается. Как бы вы тогда представляли 10 000BC? – Oded

2

Я предполагаю, что вы используете дату, которая начинается в 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.

+0

Вы правы. – user1327569

Смежные вопросы