私は次のようなコードを持っています。ほとんどのシナリオで動作しますが、今日、expiration_date
が09/30/2017 00:00:00
がcurrentDateTime
で10/15/2016 14:34:19
であるstring
より小さいシナリオが1つあります。 string
として比較している私の側のバグは何ですか?
System.DateTime expiration_date = newVer.License.Status.Expiration_Date;
DateTime currentDateTime = DateTime.Now;
currentDateTime.ToString("MM/dd/yyyy HH:mm:ss");
int a = expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
.CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
//MessageBox.Show("int a is :" + a);
if (expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
.CompareTo(currentDateTime.ToString("MM/dd/yyyy HH:mm:ss")) < 1)
{
crossDate = 1;
MessageBox.Show("Cross Date Alert"+ " Expiry Date Is :"+
expiration_date.ToString("MM/dd/yyyy HH:mm:ss")
+ " "+"Current Date Is :"+
currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
}
次のような数値を比較するように日時を比較します
DateTime expiration_date = newVer.License.Status.Expiration_Date;
DateTime currentDateTime = DateTime.Now;
if( expiration_date < currentDateTime)
{
// expired
}
時刻ではなく日付のみが必要な場合は、
DateTime expiration_date = newVer.License.Status.Expiration_Date.Date;
DateTime currentDateTime = DateTime.Now.Date;
2つの日付の日差を使用することもできます。
int daydiff = (int)((currentDateTime - expiration_date).TotalDays)
質問には2つの部分からなる回答があります。もっと簡単なことがあるかもしれませんが、:
最初に、文字列をDateTimeオブジェクトに変換します。 DateTimeクラスには、これを支援するいくつかのメソッドがあります。 ParseExactを試してください。
次に、DateTimeオブジェクトをUnixタイムスタンプに変換します。
これで、2つのlong intがあり、それらを比較し、int比較を別のDateTimeに変換して、そこから物を取り出すことができます。
日付の比較の例:
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(1);
if ( d2.CompareTo(d1)>0 )
Console.WriteLine("d2>d1");
else
Console.WriteLine("d2<=d1");
文字列に変換しないでください
DateTime expiration_date = newVer.License.Status.Expiration_Date;
if (expiration_date.CompareTo(DateTime.Now) < 1)
{
MessageBox.Show("Cross Date Alert"+ " Expiry Date Is :"+ expiration_date.ToString("MM/dd/yyyy HH:mm:ss") + " "+"Current Date Is :"+ currentDateTime.ToString("MM/dd/yyyy HH:mm:ss"));
}