web-dev-qa-db-ja.com

2つの日付時刻を比較するC#正しい方法

私は次のようなコードを持っています。ほとんどのシナリオで動作しますが、今日、expiration_date09/30/2017 00:00:00currentDateTime10/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"));
  }
7
user5313398

次のような数値を比較するように日時を比較します

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)
14
Amit Hasan

質問には2つの部分からなる回答があります。もっと簡単なことがあるかもしれませんが、:

最初に、文字列をDateTimeオブジェクトに変換します。 DateTimeクラスには、これを支援するいくつかのメソッドがあります。 ParseExactを試してください。

次に、DateTimeオブジェクトをUnixタイムスタンプに変換します。

これで、2つのlong intがあり、それらを比較し、int比較を別のDateTimeに変換して、そこから物を取り出すことができます。

2
dylanthelion

日付の比較の例:

            DateTime d1 = DateTime.Now;
            DateTime d2 = DateTime.Now.AddDays(1);

            if ( d2.CompareTo(d1)>0 )
                Console.WriteLine("d2>d1");
            else
                Console.WriteLine("d2<=d1");
1
shadow

文字列に変換しないでください

        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"));
        }
1
user3598756