2つの日時値の差を時間で表示


186

データベースから2つの日時値を取得しています。値を取得したら、2つの値の差が必要です。そのために、2つの日付値の差を格納するタイムスパン変数を作成します。

TimeSpan? variable = datevalue1 - datevalue2;

次に、Timespan変数に格納されている違いを時間数で示す必要があります。TimeSpan.TotalHoursを参照しましたが、何らかの理由で同じことを適用できませんでした。それ、どうやったら出来るの?MVCプロジェクトでC#を使用しています。差分値を時間単位で表示する必要があるだけですか?

編集:タイムスパンがnull可能だったので、合計時間プロパティを使用できませんでした。これで、TimeSpanVal.Value.TotalHoursを実行して使用できます


3
なぜ使えないのTimeSpan.TotalHours
FredrikMörk、2011

それは私を許可しません。私は試した。:(
レジー

私のタイムスパンがnull可能であるため、totalhoursプロパティを使用できませんか?
レジー


TimeSpanオブジェクトの合計時間は.Value.TotalHours
smurtagh

回答:


119

null可能でTimeSpanあるTimeSpan?を宣言したを宣言していないため、混乱していると思います。null可能にする必要がない場合は、疑問符を削除するか、を使用してください。 TimeSpanvariable.Value.TotalHours


197

あなたも見たいかもしれません

var hours = (datevalue1 - datevalue2).TotalHours;

ただし、この場合、システムは「System.Nullable <System.TimeSpan>」に「TotalHours」の定義が含まれていないことを示し、タイプ「System.Nullable <System.TimeSpan>」の最初の引数を受け入れる拡張メソッド「TotalHours」はありません。見つけられた "。その理由を教えてください。
Neha

8
Nullableでは、.TotalHoursだけでなく、.Value.TotalHoursが必要になります。これは、null許容ラッピングの要因です。あるいは、タイムスパンとしてキャストすることもできます->((TimeSpan)(nullabledatevalue1-nullabledatevalue2))。TotalHours
MarkKGreenway

90

サンプルでは、​​2つのdatetimeオブジェクトを作成しています。1つは現在の時刻、もう1つは現在の時刻に75秒を追加したものです。次に、2番目のDateTimeオブジェクトでメソッド.Subtract()を呼び出します。これはTimeSpanオブジェクトを返します。TimeSpanオブジェクトを取得したら、TimeSpanのプロパティを使用して、実際の時間、分、秒を取得できます。

DateTime startTime = DateTime.Now;

 DateTime endTime = DateTime.Now.AddSeconds( 75 );

 TimeSpan span = endTime.Subtract ( startTime );
 Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
 Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
 Console.WriteLine( "Time Difference (hours): " + span.Hours );
 Console.WriteLine( "Time Difference (days): " + span.Days );

結果:

Time Difference (seconds): 15
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

30
あなたは、次のような「合計」を使用したいTotalSecondsTotalMinutesなど
フィリップエクバーグ

38

あなたが使用している理由はありますNullableか?

Nullableあなたが使いたいなら、あなたは書くことができますvariable.Value.TotalHours

または、次のように書くこともできます(datevalue1 - datevalue2).TotalHours


おそらく、datevalue1またはdatevalue2が次の理由によりますDateTime?
Filip Ekberg

@フィリップ、大丈夫DateTimeです。.NETでは、DateTime - DateTime = TimeSpan
Ilya Kogan、

1
@イリヤ、私は彼らがおそらくそうでNullable<DateTime>あり、したがってあなたはを得るということを意味しますNullable<TimeSpan>
Filip Ekberg

あなたの答えは本当に効果的です。探していました。
gdmanandamohon 2017

7

これは、C#で2つの日付を減算する別の例です...

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 

3

従業員の有給時間やその他の正確な要件のためのより正確な方法::

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

https://dotnetfiddle.net/tVIoVJ


1
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0);
var difference = endTime.Subtract(startTime); // (-00:30:00)
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00)

2つの異なる日付を比較する場合、日付間に差を追加することもできます

new TimeSpan(24 * days, 0, 0)

0

うわー、私は言わなければならない:シンプルに保つ:

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

そして:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

DateTimeオブジェクトには、ブール結果を処理するためのすべての組み込みロジックがあります。

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