c# - 减去两次返回负值

时间:2012-08-02 17:16:05

标签: c# datetime timespan

当我尝试在特定情况下使用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();

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

我明白你想要什么,但你现在如何尝试实现它是没有意义的。 22小时减20小时是2小时,这是正确的。

你可能想要这个:

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

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

答案 1 :(得分:1)

调用Duration()将始终产生正TimeSpan。问题来自于您在计算中丢弃了几天的事实。 22:00-02:00 20:00。我相信你期待它是04:00因为02:00代表“明天”。如果这是你想要的,你将需要计算22:00-(02:00 + 24:00),这将给你-04:00,当你调用Duration()时,它将变成04:00。 / p>

答案 2 :(得分:0)

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

修改:从TimeSpan转换为DateTime会导致您丢失影响结果结果的信息:

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保持“时间点”。