2011-02-09 18 views
131

データベースから2つの日付時刻値を取得しています。値が取得されると、私は2つの値の違いが必要です。 そのために、2つの日付値の差を保存するtimespan変数を作成します。時間単位での2つのdatetime値の差を示す

TimeSpan? variable = datevalue1 - datevalue2; 

今私は時間数でタイムスパンの変数に格納された差異を表示する必要があります。 私はTimeSpan.TotalHoursを参照しましたが、何らかの理由で同じものを適用できませんでした。 どうすればいいですか? MVCプロジェクトでC#を使用しています。私は時間の差の値を簡単に表示する必要がありますか?

編集: timespanはnullに設定されていたため、合計時間プロパティを使用できませんでした。今私はTimeSpanVal.Value.TotalHoursを使ってそれを使うことができます;

+3

y 'TimeSpan.TotalHours'を使用しないでください。 –

+0

それは私を許さない。私は試した。 : – reggie

+0

私のタイムスパンがヌル可能なので、私はtotalhoursプロパティを使用できないのですか? – reggie

答えて

96

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

57

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

+18

「TotalSeconds」、「TotalMinutes」などの「Total」を使用したい –

36

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

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

(datevalue1 - datevalue2).TotalHoursと書くことができます。

+0

おそらくdatevalue1またはdatevalue2が 'DateTime? 'ですか? –

+0

@Filip、それは' DateTime'でなければなりません。 .NETでは、 'DateTime - DateTime = TimeSpan'です。 –

+1

@Illya、彼らはおそらく 'Nullable 'なので、 'Nullable 'となります。 –

125

あなたもここで

var hours = (datevalue1 - datevalue2).TotalHours; 
+0

がありますが、この場合システムには "'System.Nullable 'に 'TotalHours'の定義が含まれておらず、 'System.Nullable '型の最初の引数を受け入れる拡張メソッド 'TotalHours'発見される可能性があります "。理由を教えてもらえますか? – Neha

+5

Nullableには、.TotalHoursの代わりに.Value.TotalHoursが必要です。これはヌルラッピングの要因です。代わりに、それをtimepan - >((TimeSpan)(nullabledatevalue1 - nullabledatevalue2))としてキャストすることもできます)。TotalHours – MarkKGreenway

5

を見てみたいことがありC#で二つの日付を差し引くの他の例である...

if (DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24) 
{ 
... 
} 
0
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) 
関連する問題