2016-10-15 23 views
2

我有我的以下代码如下。它适用于大多数情况下,但今天我有一种情况,其中expiration_date09/30/2017 00:00:00小于currentDateTime这是string作为10/15/2016 14:34:19?我只是比较string的缺陷是什么?C#正确的方法来比较2日期时间

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")); 
    } 
+0

您应该直接比较日期而不是将它们转换为字符串。如果仍然坚持在比较之前转换为字符串,则应该使用随日期增加而增加的格式,即''yyyy/MM/dd HH:mm:ss'' –

+0

无需“坚持”转换两个日期字符串比较两个日期。实际上由于转换而变得“较慢”。除非你不能这样做,否则不要改变值的域。 – shadow

回答

5

比较日期时间,如果你只需要日期和时间不能再使用,你会比较这些数字为

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; 

您也可以使用两个日期的日差。

int daydiff = (int)((currentDateTime - expiration_date).TotalDays) 
+0

哪一个更好的日期或日期和时间? – user5313398

+0

@ user5313398我认为只使用日期会更好,除非您还需要时间。 –

+0

@ user5313398您还可以使用两个日期的日差。 –

1

比较日期例如:

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

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

不是需要分配的吗? – user5313398

+0

你必须比较'日期'而不是'字符串'。 – shadow

1

你的问题有两个部分答案。有可能更容易,但:

首先,将您的字符串转换为DateTime对象。 DateTime类有几种方法来帮助解决这个问题。试试ParseExact。

然后,将DateTime对象转换为Unix时间戳。

现在,您有两个长整数,可以进行比较,并将int比较转换为另一个DateTime,然后从中取出数据。

1

不转换为字符串

 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")); 
     } 
+0

@ user5313398,你通过它了吗? – user3598756