сравнить даты в asp.net - PullRequest
       5

сравнить даты в asp.net

3 голосов
/ 22 февраля 2012

Я хочу сравнить между двумя датами.Из обеих дат я выбираю только компонент даты, используя ToShortDateString(), как показано ниже.Теперь проблема в том, когда я сравниваю две даты.Его ошибка выброса -

«Оператор> = не может быть применен к операндам типа строка и строка.»

DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());
DateTime srtdate = Convert.ToDateTime(allitem["StartDate"].Text.ToString());

 (DateTime.Now.ToShortDateString() >= srtdate.ToShortDateString()) 

Мне нужно сравнить только для компонента даты , НЕ для даты и времени вместе.

Пожалуйста, предложите альтернативный способ.Спасибо

Джону: -

(Я прошел через все, что вы объяснили, и, надеюсь, понял, какой смысл вы на самом деле пытаетесь сделать. ПростоЧтобы уточнить больше и сделать последнюю проверку, я покажу пример.) У меня есть веб-интерфейс, в котором я указываю дату начала и дату окончания для имени XYZ (обратите внимание, что здесь я могу ввести только дату, а не время).

Дата начала - 22 февраля 2012 года И Дата окончания - 22 февраля 2012 года

Сейчас возвращеноконец (код), если Дата начала и Дата окончания совпадают с текущей датой ИЛИ текущая дата находится между датой начала и окончания, я хочу установить флаг ACTIVE или нет.Я даю условие как это: -

if ((DateTime.Today >= strdate.Date) && (DateTime.Today <= enddate.Date))
                    lblCondition.Text = "CHECKED";

Теперь, когда я отлаживаю код,

Оба DateTime.Today и strdate.Date дает значение как 22.02.2012 в 12:00:00.

Итак, Джон, мой вопрос таков: - сработают ли «сегодня» и «дата» согласно указанному требованию,где используется только компонент даты.Я надеюсь, что так и будет.

Большое спасибо за все ваши объяснения ранее.

Ответы [ 3 ]

7 голосов
/ 22 февраля 2012

Почему вы вообще переводите в строковое представление?Если вы хотите сравнить только части даты с двумя значениями DateTime, просто используйте свойство Date для каждого из них:

if (x.Date >= y.Date)

И * 1009Свойство * эквивалентно DateTime.Now.Date.

И Date, и Today убирают часть времени, оставляя время полуночи.Это не идеально, что у вас все еще есть тип, который способен представлять время, но именно так работает DateTime API: (

Обратите внимание, что вы обычно избегайте использования DateTime.Now или DateTime.Today в веб-приложениях, если только вы не действительно чувствуете себя комфортно с использованием часового пояса системы по умолчанию в качестве границы дня.быть тем же, что и у сервера.

Вы должны избегать использования преобразования строк, если ваша цель не реально для получения текстового представления.

Конечно, другой альтернативой будет использованиебиблиотека даты / времени, которую я создаю, Noda Time , где вы можете использовать тип LocalDate - очевидно, это делает более понятным, что вас интересует только дата, а не время.

РЕДАКТИРОВАТЬ: Поскольку ОП кажется неубедительным, что Date действительно игнорирует компонент времени, вот пример:

using System;

public class Test
{
    static void Main()
    {
        // Two DateTime values with different times but
        // on the same date
        DateTime early = new DateTime(2012, 2, 22, 6, 0, 0);
        DateTime late = new DateTime(2012, 2, 22, 18, 0, 0);

        Console.WriteLine(early == late); // False
        Console.WriteLine(early.Date == late.Date); // True
    }    
}
3 голосов
/ 22 февраля 2012
DateTime.Today >= strdate.Date

некоторые мысли

Подумайте над следующим примером: вам нужно сравнить следующие числа 1.5 и 2.5. Они представлены в .Net как десятичные, двойные или с плавающей точкой, но давайте использовать десятичную. Больше 2,5
Допустим, вам нужно сравнить неотъемлемую часть этих чисел (1. и 2.). Для сравнения вы все равно будете использовать десятичный тип .

Math.Truncate(x) ? Math.Truncate(y) // x = 1.5, y = 2.5

То же, что и для DateTime. DateTime.Date вернет «неотъемлемую» часть вашей даты, так как Math.Truncate возвращает неотъемлемую часть «действительного» числа, но оба будут основываться на своем первоначальном типе.

0 голосов
/ 14 сентября 2013

надеюсь, что это поможет вам.

using System;

public class Example

{

   public static void Main()

   {

      DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
      DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
      int result = DateTime.Compare(date1, date2);
      string relationship;

      if (result < 0)
         relationship = "is earlier than";
      else if (result == 0)
         relationship = "is the same time as";         
      else
         relationship = "is later than";

      Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
   }
}
// The example displays the following output: 
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...