2012-04-11 95 views
0

使用C#DateTime,我想减去过去0(或午夜)的时间。但是,这样做时出现错误。我试图创建一个时间轴,您可以放大和缩小并滚动浏览时间。我收到以下错误:“添加或减少的值会导致无法表示的DateTime。”DateTime错误从0小时减去

我猜DateTime不知道如何从0到23回绕?我如何解决这个问题?

+11

请发布您的代码,以便我们可以看到您在做什么。 – Oded 2012-04-11 20:34:09

+1

欢迎使用stackoverflow。 Fyi,没有足够信息的问题往往会被封闭或被拒绝投票。只要有可能,一定要包含[SSCCE](http://sscce.org/)。它使其他人更容易帮助你解决问题。 – Leigh 2012-04-11 23:31:15

回答

2

如果从DateTime减去TimeSpan,将“环绕”午夜:

> 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',正如Jon Skeet在[他的回答](http://stackoverflow.com/a/10113564/1583)中发布的那样。 – Oded 2012-04-11 20:40:07

+1

是正确的,但是在什么情况下,您想表示的日期/时间少于“01/01/0001 00:00:00”?如果你需要'DateTime'来做到这一点,你很可能会遇到更大的设计问题。 – qJake 2012-04-11 20:41:42

+0

邓诺。但是如果没有更多的OP信息,我们就不知道要做什么。那么你如何代表10,000BC? – Oded 2012-04-11 20:42:26

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 2012-04-12 13:23:36