0

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

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

4

3 回答 3

2

如果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]
于 2012-04-11T20:36:31.453 回答
2

我的猜测是您使用的是从 开始的日期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

于 2012-04-11T20:37:40.853 回答
0

从设置为午夜的 TimeSpan 中减去 5 分钟,结果为 -00:05。这导致时间跨度为 23:55 而不是 -00:05。

DateTime.Today.Subtract(TimeSpan.FromMinutes(5)).TimeOfDay;
于 2021-06-15T20:17:44.347 回答