1

当我尝试在特定情况下用 hr1 减去 hr2 时遇到问题,例如,当hr1 = 13:00hr2 = 15:00,好的,结果是02:00。但是当值为:hr1 = 22:00hr2 = 02:00时,结果是20:00。结果应该是04:00

 TimeSpan ts1 = hr1.Subtract(hr2).Duration();
 TextBox1.Text = ts1.ToString();

我怎么解决这个问题?

4

3 回答 3

2

我了解您想要什么,但是您目前如何尝试实现它是没有意义的。22 小时减去 20 小时是 2 小时,这是正确的。

你可能想要这个:

new DateTime(1, 1, 2, 2, 0, 0) - new DateTime(1, 1, 1, 22, 0, 0)

你不想减去 TimeSpan,你想减去日期(在这种情况下是假日期)。

于 2012-08-02T17:18:32.187 回答
1

调用Duration()总是会产生一个肯定的TimeSpan。问题在于您在计算中丢弃了天数。22:00-02:0020:00。我相信您期望它是 04:00,因为 02:00 代表“明天”。如果这是您想要的,您将需要计算 22:00-(02:00+24:00) 这将为您提供 -04:00,当您调用时将变为 04:00 Duration()

于 2012-08-02T17:22:55.953 回答
0

您正在尝试减去两个“跨度”或持续时间,而不是固定的时间点。您的代码目前所说的是,我想从 20 小时(实际上是 20 小时)中减去两个小时。相反,您需要使用DateTimes. 困难的部分将是决定你的时间跨度的日期。我会重新编写代码以使用DateTimes 并及时保留您实际尝试计算的“时刻”。

编辑:从 a 转换TimeSpan为 aDateTime可能会导致您丢失影响结果结果的信息:

var ts1 = new DateTime (1, 1, 1, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) -
          new DateTime (1, 1, 1, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds);

不同于:

var ts1 = new DateTime (1, 1, 1, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) -
          new DateTime (1, 1, 2, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds);

或者:

var ts1 = new DateTime (1, 1, 2, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) -
          new DateTime (1, 1, 1, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds);

这就是为什么您需要使用DateTime.

于 2012-08-02T17:25:52.590 回答