2012-04-11 5 views
0

Mit C# DateTime möchte ich eine Zeit nach 0 (oder Mitternacht) subtrahieren. Allerdings bekomme ich dabei einen Fehler. Ich versuche, eine Zeitleiste zu erstellen, in der Sie ein- und auszoomen und die Zeiten durchblättern können. Ich erhalte den folgenden Fehler: "Der hinzugefügte oder subtrahierte Wert führt zu einer nicht darstellbaren DateTime."DateTime-Fehler Subtrahieren von 0 Stunde

Ich denke, DateTime nicht wissen, wie man von 0 bis 23 zurück? Wie komme ich hier zurecht?

+11

Bitte senden Sie Ihren Code, damit wir sehen können, was Sie tun. – Oded

+1

Willkommen bei stackoverflow. Fyi, Fragen ohne ausreichende Informationen werden oft geschlossen oder abgelehnt. Stellen Sie nach Möglichkeit sicher, dass Sie eine [SSCCE] (http://sscce.org/) hinzufügen. Es erleichtert anderen das Finden des Problems erheblich. – Leigh

Antwort

2

Wenn Sie ein TimeSpan von einem DateTime abziehen, wird es „Wrap-around“ nach Mitternacht:

> 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

Es sei denn, es geht zu weniger als "DateTime.MinValue", wie Jon Skeet in [seiner Antwort] (http://stackoverflow.com/a/10113564/1583) gepostet hat. – Oded

+1

Korrekt, aber in welchem ​​Szenario möchten Sie ein Datum/eine Zeit weniger als '01/01/0001 00: 00: 00' darstellen? Wenn Sie 'DateTime' benötigen, haben Sie wahrscheinlich größere Designprobleme. – qJake

+0

Weiß nicht. Aber ohne weitere Informationen vom OP haben wir keine Idee, was versucht wird. Wie würdest du dann 10.000 BC darstellen? – Oded

2

Meine Vermutung ist, dass Sie das Datum verwenden, die bei DateTime.MinValue beginnt. Wenn Sie die Zeit so subtrahieren, dass sie vor DateTime.MinValue geht, erhalten Sie diese Ausnahme.

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

Wenn Sie wirklich eine "just a time" Darstellung wollen, betrachten Noda Time verwenden, mein Pseudo-Port von Joda Time mit einem eher reichen Typ-System als nur DateTime.

+0

Sie haben Recht. – user1327569