【问题标题】:C# correct method to compare 2 date timeC# 比较两个日期时间的正确方法
【发布时间】:2016-10-15 06:46:40
【问题描述】:

我的以下代码如下。它适用于大多数情况,但今天我的一种情况是expiration_date09/30/2017 00:00:00 小于currentDateTimestring10/15/2016 14:34:19?我刚刚比较为 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"));
  }

【问题讨论】:

  • 您应该直接比较日期而不是将它们转换为字符串。如果您仍然坚持在比较之前转换为字符串,则应使用随日期增加而增加的格式,即"yyyy/MM/dd HH:mm:ss"
  • 不需要insist将两个日期转换成字符串来比较两个日期。由于转换,实际上是“较慢”。除非您不能这样做,否则不要更改值的域。

标签: c# datetime comparison


【解决方案1】:

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

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)

【讨论】:

  • 日期和日期时间哪个更好?
  • @user5313398 我认为仅使用日期会更好,除非您也需要时间。
  • @user5313398 也可以使用两个日期的天差。
  • 日期时间更精确。即使您只使用日期,它也能满足您的需求。
  • 这是一种微不足道的评论,但如果 if( expiration_date > currentDateTime) 那么它仍然有效。我的意思是较旧的日期比最近的要小:)
【解决方案2】:

您的问题有两个部分的答案。可能会有更简单的事情,但是:

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

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

现在,您有两个 long int,您可以比较它们,并将 int 比较转换为另一个 DateTime,然后从那里获取内容。

【讨论】:

    【解决方案3】:

    比较日期示例:

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

    【讨论】:

    • 你必须比较Dates而不是Strings
    【解决方案4】:

    不要转换成字符串

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

    【讨论】:

    • @user5313398,你通过了吗?
    【解决方案5】:

    .NET 为此提供了一个很好的方法来使用DateTime.Compare() 方法比较两个日期时间对象。 DateTime.Compare() 方法采用 2 个 datetime 对象并比较日期和时间或两者之一并返回一个整数值。 DateTime.Compare()

    我在这里用一段示例代码演示了相同的内容:Comparing 2 DateTime objects in C#.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多