3

日時を保持するリストがあります。

2つのDateTimeの差を計算するには、を使用しますTimeSpan

public static List<DateTime> list = new List<DateTime>();
TimeSpan ts = new TimeSpan();
double result = 0;

ts = DateTime.Now - list[list.Count-1];
result = ts.TotalSeconds;

このコードをデバッグする場合、DateTime.Nowとの両方にlist[list.Count-1]DateTimesがあり、DateTime.Nowはリストの値よりもコース外に高くなっています。

しかし、何らかの理由で、変数の結果で0を取得し続けるのですが、どうして正確になりますか?

よろしく、ピート

4

6 に答える 6

3

以下を試してみましたが、完全に問題なく動作します。

            List<DateTime> list = new List<DateTime>();
            list.Add(DateTime.Now.AddDays(-1));
            list.Add(DateTime.Now);
            list.Add(DateTime.Now.AddDays(1));
            TimeSpan ts = new TimeSpan();
            double result = 0;

            ts = DateTime.Now - list[list.Count - 1];
            result = ts.TotalSeconds;

デバッグ画像を添付:

ここに画像の説明を入力

機能しない理由として、次のことが考えられます。

  1. あなたのリストが入力されていないかのどちらかです
  2. または、 の値がts.TotalSecondsdouble の範囲より小さい場合 (これは実際には不可能です。)
于 2012-04-26T14:52:07.527 に答える
2

最初のコメント、あなたは必要ありません= new TimeSpan();-あなたがts再びさらに下に設定したとき、あなたはとにかくこれを捨てるだけです。

の値が0である場合、デバッガーはどの行にありますresultか?設定されているラインをまたいでいますresultか?あなたが回線に接続している場合、その回線はまだ実際には実行されていません...

于 2012-04-26T14:45:41.697 に答える
1

ts = DateTime.Now - list[list.Count-1]; を使用する代わりに ts=DateTime.Now.Subtract(list[list.Count-1] を使用

于 2012-04-26T14:46:56.443 に答える
1

時差は数秒では小さすぎると思います。ミリ秒かそれよりも小さいかもしれません。このようなダニを試してみてください。

結果 = ts.Ticks;

于 2012-04-26T14:47:33.523 に答える
1

投稿したコードに問題はありません (ただし、変数の宣言と初期化に参加することをお勧めします)。推測する必要がありますが、おそらく例外を「飲み込んで」空のリストを渡していますか?

次に、ライン

ts = DateTime.Now - list[list.Count-1];

は例外をスローし、そのresult値を保持します0

于 2012-04-26T14:49:46.057 に答える
1

list には要素がないため、 list.Count - 1 は何もヒットしません。また、計算に 1 秒もかからない場合もあります。減算する時間を(ティックを使用して)追加しました。それ以外は、あなたが持っているものに問題はありません。

double result = 0;
List<DateTime> list = new List<DateTime>();
list.Add(new DateTime(123456));

TimeSpan ts = DateTime.Now - list[list.Count - 1];
result = ts.TotalSeconds;
于 2012-04-26T15:00:23.237 に答える