web-dev-qa-db-ja.com

C#で2回の間の時間を取得しますか?

テキストボックスが2つあります。 1つは出勤用、もう1つは出勤用です。時刻は次の形式で配置されます。

Hours:Minutes

午前7:00に出勤し、午後2:00に出勤したとしましょう。

現在のコードでは、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;
43
Hunter Mitchell
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のコードがis完全に有効であるにもかかわらず、なぜ動作しないのかを実際に説明したことはありません。投票数が多いのは、「C#」、「タイムスパン」、「間」という用語の組み合わせを検索すると投稿がGoogleに表示されるためです。

82
Kittoes0124

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

 TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
11
Tim Lehner

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を実行する必要があります。

4

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

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)))
0
SMA