誰かが私が残りの日数の差を取得するために2つの日時フィールドを差し引くことを理解するのを手伝ってくれるならそれをいただければ幸いです。
8 に答える
これは、C# を使用すると非常に簡単に実行できます。DateTimes を比較するために、 TimeSpanというクラスがあります。この場合、TimeSpan 構造は、2 つの datetimes の差として定義されます。
あなたの DateTimes が start と end と呼ばれているとしましょう。
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
DateTimes を 2009 年 6 月 14 日と 2009 年 12 月 14 日に設定しました。
それでは、両者の違いを見てみましょう。これを行うには、TimeSpan を作成します。
TimeSpan difference = end - start;
この TimeSpan オブジェクトを使用すると、時間の差をさまざまな方法で表現できます。ただし、具体的に日数の差を求めたので、それを取得する方法は次のとおりです。
Console.WriteLine("Difference in days: " + difference.Days);
したがって、プロパティはTimeSpan.Daysと呼ばれます。
最終コード
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
Console.WriteLine("Difference in days: " + difference.Days); //Extract days, write to Console.
TimeSpan 構造体の使用の詳細については、この MSDN ドキュメント(特に C# の例) を参照してください。
私が助けてくれることを願っています!
更新:一部の回答では、次のように、1 つのステップで減算を行うことを提案しています。
int days = (dt2 - dt1).Days;
また
int numDaysDiff = Math.Abs(date2.Subtract(date1).Days);
ただし、それらは私の回答と同じもので、短縮されているだけです。これは、DateTime.Subtract() メソッドと DateTimes の減算演算子が TimeSpan を返し、そこから日数にアクセスできるためです。DateTime オブジェクトと TimeSpan オブジェクトの間で何が起こっているのか、またどのように機能するのかを明確に理解できるように、コード サンプルでは特に長いアプローチを使用しました。もちろん、今述べた他のアプローチも問題ありません。
更新#2:
非常によく似た質問が以前に尋ねられましたが、ここで見つけることができます。ただし、その質問の主なポイントは、コード サンプル (基本的にはすべての回答と同等)が休日の回答を提供することがある理由です。これは、この質問にも重要だと思います。
他の質問に対する主な回答が示唆するように、次のコードを使用できます。
int days = (int)Math.Ceiling(difference.TotalDays);
このコードは Math.Ceiling を使用します。MSDN によると、これは次のとおりです。
指定された倍精度浮動小数点数以上の最小の整数値を返します。
どのように日数を数えますか?
したがって、日数のカウント方法に問題があります。1 日の一部 (1 日の 0.5 など) を次のようにカウントしますか?
- 丸一日- これは Math.Ceiling を使用して TimeSpan.TotalDays を切り上げ、開始日をカウントします。
- 1 日の一部- TimeSpan.TotalDays (丸められていない) を小数として (double データ型で) 返すことができます。
- 何もありません- 1 日のその部分を無視して、TimeSpan.Days を返すだけです。
上記のコードサンプルは次のとおりです。
1 日としてカウントする(Math.Ceiling() を使用して切り上げます):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
int days = (int)Math.Ceiling(difference.TotalDays); //Extract days, counting parts of a day as a full day (rounding up).
Console.WriteLine("Difference in days: " + days); //Write to Console.
1 日の一部として数えます(Math.Ceiling() を使用せず、1 日の一部として 10 進数形式のままにします):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
double days = difference.TotalDays; //Extract days, counting parts of a day as a part of a day (leaving in decimal form).
Console.WriteLine("Difference in days: " + days); //Write to Console.
1日として数えます(丸日数に切り捨てます):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
int days = difference.TotalDays; //Extract days, counting parts of a day as nothing (rounding down).
Console.WriteLine("Difference in days: " + days); //Write to Console.
使用する
DateTime departure = new DateTime(2010, 6, 12, 18, 32, 0);
DateTime arrival = new DateTime(2010, 6, 13, 22, 47, 0);
TimeSpan travelTime = arrival - departure;
最も簡単な方法は、TimeSpan() を利用することです。この減算関数は、期間に関して 2 つの日付の差を返します。これで、日、月などのフィールドを取得できます。日にアクセスするには、次のサンプル コードを使用できます。
VB.Net コード;
Dim tsTimeSpan As TimeSpan
Dim ldDate1 as Date
Dim ldDate2 as Date
'Initialize date variables here
tsTimeSpan = ldDate1 .Subtract(ldDate2)
Dim NumberOfDays as integer = tsTimeSpan.days
C#.Net コード;
DateTime lDate1;
DateTime lDate2;
TimeSpan tsTimeSpan ;
int NumberOfDays;
//Initialize date variables here
tsTimeSpan = ldDate1 .Subtract(ldDate2);
NumberOfDays = tsTimeSpan.days;
DateTime dt1 = new DateTime(2009,01,01,00,00,00);
DateTime dt2 = new DateTime(2009,12,31,23,59,59);
int days = (dt2 - dt1).Days;
日数差
これらの答えは、2 つのフィールドを減算した結果である構造int
から日数を取得します...System.TimeSpan
System.DateTime
クイックアンサー- 日数差を取得します。
int numDaysDiff = date2.Subtract(date1).Days;
別の回答- 日付がいずれかの順序で提供される可能性がある場合に備えて、Math.Abs を使用して負の数ではないことを確認します。
int numDaysDiff = Math.Abs( date2.Subtract(date1).Days );
using System
名前空間を終了するためのサンプル データ:
// sample data
DateTime date1 = DateTime.Now;
DateTime date2 = DateTime.Now.AddDays(10);
MSDN リファレンス (およびその他のサンプル コード):
DateTime theDate = DateTime.Today;
int datediff = theDate.Subtract(expiryDate).Negate().Days;
if expiryDate > theDate then you get Negative value: -14
expiryDate is less than theDate then you get positive value: 14
次のようなシナリオでは明らかにこれが必要になる場合があります
- 有効期限の 14 日前に通知メールを送信する
- 有効期限の 14 日後に別の通知メールを送信する
負の値になる可能性のある差が必要です
TimeSpanを見る必要があります。
時間セクションを無視して正確な日を取得するには
DateTime d1 = Convert.ToDateTime(DateTime.Now.ToShortDateString());
DateTime d2 = Convert.ToDateTime(DateTime.Now.AddDays(46).ToShortDateString());
var days = Convert.ToInt32(d2.Subtract(d1).TotalDays)