C#比较两个日期时间的正确方法

C#比较两个日期时间的正确方法,c#,datetime,comparison,C#,Datetime,Comparison,我有以下代码。它在大多数情况下都能工作,但今天我遇到了一种情况,即到期日为2017年09月30日00:00:00小于currentDateTime,后者位于string中,如10/15/2016 14:34:19?我刚才比较为string,我这边的bug是什么 System.DateTime expiration_date = newVer.License.Status.Expiration_Date; DateTime currentDateTime = DateTime.Now;

我有以下代码。它在大多数情况下都能工作,但今天我遇到了一种情况,即
到期日
2017年09月30日00:00:00
小于
currentDateTime
,后者位于
string
中,如
10/15/2016 14:34:19
?我刚才比较为
string
,我这边的bug是什么

  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"));
  }
System.DateTime expiration\u date=newVer.License.Status.expiration\u date;
DateTime currentDateTime=DateTime.Now;
currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
int a=到期日ToString(“MM/dd/yyyy HH:MM:ss”)
.CompareTo(currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
//Show(“inta是:+a”);
if(到期日至字符串(“MM/dd/yyyy HH:MM:ss”)
.CompareTo(currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”)<1)
{
交叉日期=1;
MessageBox.Show(“交叉日期警报”+”到期日期为:“+
到期日ToString(“MM/dd/yyyy HH:MM:ss”)
+“”+“当前日期为:”+
currentDateTime.ToString(“MM/dd/yyyy HH:MM:ss”);
}
比较日期示例:

            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 d1=DateTime.Now;
DateTime d2=DateTime.Now.AddDays(1);
如果(d2.与(d1)>0相比)
控制台写入线(“d2>d1”);
其他的

Console.WriteLine(“d2您的问题有两个部分的答案。可能有更简单的答案,但是:

首先,将字符串转换为DateTime对象。DateTime类有几个方法可以帮助您完成此操作。请尝试使用ParseExact

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


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

不要转换为字符串

        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"));
        }
DateTime expiration\u date=newVer.License.Status.expiration\u date;
如果(到期日与(日期时间现在)<1)
{
MessageBox.Show(“交叉日期警报”+“到期日期为:“+expiration\u Date.ToString”(“MM/dd/yyyy HH:MM:ss”)+“+”当前日期为:“+currentDateTime.ToString”(“MM/dd/YYYYY HH:MM:ss”);
}

比较日期时间,就像比较数字一样,例如

DateTime expiration_date = newVer.License.Status.Expiration_Date;
DateTime currentDateTime = DateTime.Now;
if( expiration_date < currentDateTime)
{
   // expired 
}
您还可以使用两个日期的日差

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

.NET为此提供了一个很好的方法,可以使用
datetime.compare()
方法比较两个datetime对象。
datetime.compare()
方法使用两个datetime对象,比较日期和时间,或其中一个,并返回一个整数值


我在这里用一段示例代码演示了这一点:

您必须比较
日期
而不是
字符串
。日期或日期和时间哪一个更好?@user5313398我认为只使用日期更好,除非您也需要时间。@user5313398您也可以使用两个日期的日差。DateTime更精确。它即使您只使用日期,我也会满足您的需求。这是一种微不足道的评论,但如果(expiration_date>currentDateTime)仍然有效。我的意思是,较旧的日期比较新的日期小:)您应该直接比较日期,而不是将日期转换为字符串。如果您仍然坚持在比较之前转换为字符串,则应使用随日期增加而增加的格式,即“yyyy/MM/dd HH:MM:ss”“
无需坚持将两个日期转换为字符串来比较两个日期。因为转换,实际上是“慢”的。除非您无法更改某个值的域,否则不要更改该值的域。@user5313398,您完成了吗?
int daydiff = (int)((currentDateTime - expiration_date).TotalDays)