使用C#DateTime,我想减去过去0(或午夜)的时间。但是,这样做时出现错误。我试图创建一个时间轴,您可以放大和缩小并滚动浏览时间。我收到以下错误:“添加或减少的值会导致无法表示的DateTime。”DateTime错误从0小时减去
我猜DateTime不知道如何从0到23回绕?我如何解决这个问题?
使用C#DateTime,我想减去过去0(或午夜)的时间。但是,这样做时出现错误。我试图创建一个时间轴,您可以放大和缩小并滚动浏览时间。我收到以下错误:“添加或减少的值会导致无法表示的DateTime。”DateTime错误从0小时减去
我猜DateTime不知道如何从0到23回绕?我如何解决这个问题?
如果从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]
除非它小于'DateTime.MinValue',正如Jon Skeet在[他的回答](http://stackoverflow.com/a/10113564/1583)中发布的那样。 – Oded 2012-04-11 20:40:07
是正确的,但是在什么情况下,您想表示的日期/时间少于“01/01/0001 00:00:00”?如果你需要'DateTime'来做到这一点,你很可能会遇到更大的设计问题。 – qJake 2012-04-11 20:41:42
邓诺。但是如果没有更多的OP信息,我们就不知道要做什么。那么你如何代表10,000BC? – Oded 2012-04-11 20:42:26
我的猜测是,你正在使用的开始于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
伪端口。
你是对的。 – user1327569 2012-04-12 13:23:36
请发布您的代码,以便我们可以看到您在做什么。 – Oded 2012-04-11 20:34:09
欢迎使用stackoverflow。 Fyi,没有足够信息的问题往往会被封闭或被拒绝投票。只要有可能,一定要包含[SSCCE](http://sscce.org/)。它使其他人更容易帮助你解决问题。 – Leigh 2012-04-11 23:31:15