it-roy-ru.com

C # правильный метод для сравнения 2 даты

У меня есть следующие коды, как показано ниже. Это работает в большинстве сценариев, но сегодня у меня один сценарий, где expiration_date равен 09/30/2017 00:00:00 меньше, чем currentDateTime, который находится в string как 10/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"));
  }
5
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;

Вы также можете использовать разницу в два дня.

int daydiff = (int)((currentDateTime - expiration_date).TotalDays)
11
Amit Hasan

Пример сравнения дат:

            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. Класс DateTime имеет несколько методов, чтобы помочь с этим. Попробуйте ParseExact.

Затем преобразуйте объект DateTime в метку времени Unix.

Теперь у вас есть два длинных целых числа, которые вы можете сравнивать, преобразовывать int в другое значение DateTime и получать оттуда все.

1
dylanthelion

не конвертировать в строки

        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