使用 C# DateTime,我想减去过去 0(或午夜)的时间。但是,这样做时出现错误。我正在尝试创建一个时间线,您可以在其中放大和缩小并滚动浏览时间。我收到以下错误:“添加或减去的值导致无法表示的 DateTime。”
我猜 DateTime 不知道如何从 0 回绕到 23?我该如何解决这个问题?
使用 C# DateTime,我想减去过去 0(或午夜)的时间。但是,这样做时出现错误。我正在尝试创建一个时间线,您可以在其中放大和缩小并滚动浏览时间。我收到以下错误:“添加或减去的值导致无法表示的 DateTime。”
我猜 DateTime 不知道如何从 0 回绕到 23?我该如何解决这个问题?
如果TimeSpan
从 a中减去 a 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
。如果您减去 time 使其在 before 之前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伪端口,具有比 just 更丰富的类型系统DateTime
。
从设置为午夜的 TimeSpan 中减去 5 分钟,结果为 -00:05。这导致时间跨度为 23:55 而不是 -00:05。
DateTime.Today.Subtract(TimeSpan.FromMinutes(5)).TimeOfDay;