C#を使用して2つのDateTimeオブジェクトの時差を取得するにはどうすればよいですか?


159

DateTimeC#を使用して2つのオブジェクト間の時間差を取得するにはどうすればよいですか?

回答:


227

次の例は、これを行う方法を示しています。

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

実行すると、日付と時刻の間に30分の差があるため、これは「30」を出力します。

の結果DateTime.Subtract(DateTime x)は、他の有用なプロパティを提供するTimeSpanオブジェクトです。


5
違いを表示するには、次のようにしますConsole.WriteLine((a - b).ToString(@"hh\:mm\:ss"))。参照:MSDNカスタムTimeSpanフォーマット
ishmael

これでうまくいきました。クライアントがREST呼び出しを行って応答が返されるまでの秒数を知りたかっただけです。
ジグラー

1
使用に注意してTotalMinutesください!(ではないMinutes
Shahar Shokrani

63

あなたはTimeSpan構造体が欲しい:

TimeSpan diff = dateTime1 - dateTime2;

TimeSpanオブジェクトは、日数、時間、分、秒、および秒の端数の正または負の数として測定される時間間隔(時間または経過時間の期間)を表します。TimeSpan構造体を使用して時刻を表すこともできますが、時刻が特定の日付と無関係の場合のみです。

この構造から日、時間、分、秒、ミリ秒を戻すには、さまざまな方法があります。

あなただけの違いに興味があるなら:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

順序に関係なく、時間の間に正の差を与えます。

時間コンポーネントを取得したが、時刻が午前0時までに分割される可能性がある場合、実際の差を取得するには、スパンに24時間を追加する必要があります。

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

こんにちは。datetime2が09:00で、dateTime1が18:00の場合、diffは09Hours 00分です。次に、datetime2の方程式は21:00、dateTime1は03:00であり、違いは負で間違っています。これを解決するには?
Pranesh Janarthanan

@Pranesh-オブジェクトに日付が含まれている場合、問題はありません。時間が含まれていない場合は、絶対差を取るか、タイムスパンに24時間を追加して正の差を与えます。どちらが正しいかは、アプリケーションによって異なります。
ChrisF

ええ、私はそれらのコメントをすでに削除しました!説明のためのコード例を見せていただけますか?
Pranesh Janarthanan

30

必要なのは、TimeSpanを返すDateTimeクラスのSubtractメソッドを使用することです。

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

私が通常行う方法は、2つのDateTimeを減算することです。これにより、差分を示すTimeSpanが取得されます。

次に例を示します。

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

両方がUTC日時値である場合、実行できます TimeSpan diff = dateTime1 - dateTime2;

それ以外の場合は、考えられるすべてのケースで正しい答えが得られる可能性はゼロです。


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);

2

TimeSpanを使用する必要があります。ここにいくつかのサンプルコードがあります:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

2
または、ただTimeSpan sincelast = DateTime.Now - LastUpdate;
ベンM

2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}

2

次のように使用して、2つのDatetimeオブジェクトの違いを取得できます。DateTimeオブジェクトdt1およびdt2があり、次にコードがあるとします。

TimeSpan diff = dt2.Subtract(dt1);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.