1

特定の状況で hr2 を hr1 で減算しようとすると問題が発生します。たとえば、 と の場合hr1 = 13:00hr2 = 15:00結果は02:00です。しかし、値がhr1 = 22:00とのhr2 = 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 です。02:00 は「明日」を表すため、04:00 になると予想していると思います。それが必要な場合は、22:00-(02:00+24:00) を計算する必要があります。これにより、-04:00 が得られます。これは、 を呼び出すと 04:00 になりますDuration()

于 2012-08-02T17:22:55.953 に答える
0

固定された時点ではなく、時間の 2 つの「スパン」または期間を差し引こうとしています。あなたのコードが現在言っていることは、20 時間 (実際には 20 時間) から 2 時間を減算したいということです。代わりに、s を使用する必要がありますDateTime。難しいのは、タイムスパンの日付を決定することです。sを使用するようにコードを作り直して、DateTime実際に計算しようとしている時間の「瞬間」を保持します。

編集: a から a に変換するTimeSpanDateTime、結果の結果に影響する情報が失われる可能性があります。

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 に答える