web-dev-qa-db-ja.com

2つの日時値の違いを時間単位で表示

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

TimeSpan? variable = datevalue1 - datevalue2;

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

編集:timespanがnull許容値だったので、私はtotal hoursプロパティを使用できませんでした。これで、TimeSpanVal.Value.TotalHoursを実行して使用できます。

171
reggie

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

111
Hans Olsson

また見たいと思うかもしれません

var hours = (datevalue1 - datevalue2).TotalHours;
172
MarkKGreenway

サンプルでは、​​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 );

結果:

時差(秒):15時差(分):1時差(時):0時差(日):0

75
safi

Nullableを使っている理由はありますか?

Nullableを使いたい場合は、variable.Value.TotalHoursと書くことができます。

あるいは(datevalue1 - datevalue2).TotalHoursと書くこともできます。

38
Ilya Kogan

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

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

従業員が時間やその他の精度要件を支払うためのより正確な方法:

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

2
smurtagh

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

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オブジェクトには、ブール結果を処理するためのすべての組み込みロジックがあります。

0
Rusty Nail
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)