61

私は2つのテキストボックスを持っています。1 つはクロック イン タイム用、もう 1 つはクロック アウト用です。時刻は次の形式で表示されます。

Hours:Minutes

午前 7 時に出勤し、午後 2 時に退勤したとします。

現在のコードでは 2 時間の差が生じますが、7 時間のはずです。C#でそれを行うにはどうすればよいですか。ユーザーが AM または PM を選択できるようにして、24 時間に変換しようとしましたが、混乱しました。

では、基本的に、2 つの時間の時間差はどのように計算すればよいでしょうか。

これを試してみましたが、数字を差し込むと7時間ではなく2時間になりました。

DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);

TimeSpan duration = startTime - endtime;
4

5 に答える 5

103
string startTime = "7:00 AM";
string endTime = "2:00 PM";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

07:00:00 が出力されます。

ユーザーが軍事時間を入力した場合にも機能します。

string startTime = "7:00";
string endTime = "14:00";

TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));

Console.WriteLine(duration);
Console.ReadKey();

出力: 07:00:00。

フォーマットを変更するには: duration.ToString(@"hh\:mm")

詳細: http://msdn.microsoft.com/en-us/library/ee372287.aspx

補遺:

何年にもわたって、これが私がこれまでに与えた中で最も人気のある回答であることに幾分悩まされてきました。元の回答では、OPのコードが完全に有効であるにもかかわらず、なぜ機能しなかったのかを実際に説明したことはありません。多くの票を獲得した唯一の理由は、人々が「C#」、「タイムスパン」、「ビトウィーン」という用語の組み合わせを検索すると、投稿が Google に表示されるためです。

于 2012-09-20T21:47:26.803 に答える
18

ティックに時間がかかるTimeSpanコンストラクターを使用できます。

 TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
于 2012-09-20T21:46:37.650 に答える
4

2 つのポイント:

  1. 入力内容を確認してください。あなたが話している時間の値を差し引いて 2 時間を得る状況は想像できません。私がこれを行う場合:

        DateTime startTime = Convert.ToDateTime("7:00 AM");
        DateTime endtime = Convert.ToDateTime("2:00 PM");
        TimeSpan duration = startTime - endtime;
    

    ...-07:00:00結果として得られます。AM/PM の値を入力するのを忘れたとしても、次のようになります。

        DateTime startTime = Convert.ToDateTime("7:00");
        DateTime endtime = Convert.ToDateTime("2:00");
        TimeSpan duration = startTime - endtime;
    

    ...わかり05:00:00ました。したがって、リストした値が入力に含まれていないか、予期しない方法で解析が開始されるマシン環境にいます。または、報告している結果が実際には得られていません。

  2. 開始時間と終了時間の差を見つけるには、 を実行する必要がありますがendTime - startTime、その逆ではありません。

于 2012-09-20T21:46:13.077 に答える
0

別の方法 (より長い) VB.net で [2300 開始と 0700 終了の翌日を言う]

If tsStart > tsFinish Then

                            ' Take Hours difference and adjust accordingly
                            tsDifference = New TimeSpan((24 - tsStart.Hours) + tsFinish.Hours, 0, 0)

                            ' Add Minutes to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, Math.Abs(tsStart.Minutes - tsFinish.Minutes), 0))


                            ' Add Seonds to Difference
                            tsDifference = tsDifference.Add(New TimeSpan(0, 0, Math.Abs(tsStart.Seconds - tsFinish.Seconds)))
于 2014-03-25T17:08:46.797 に答える