Сравнение будущих дат в C # - PullRequest
0 голосов
/ 09 января 2010

Я знаю, что это, вероятно, довольно простой вопрос, но я пытаюсь написать функцию, которая возвращает значение bool "true", если дата прошла в будущем, например:

bool IsFutureDate(System.DateTime refDate)
{
    if (refDate > DateTime.Now)  // This doesn't seem to work
        return true;
    return false;
}

Кто-нибудь подскажет, кому написать такую ​​функцию, которая действительно работает?

Спасибо

Ответы [ 4 ]

5 голосов
/ 09 января 2010

Единственное, о чем я могу думать, это то, что вы можете получить неопределенное поведение, если refDate == сегодня.

DateTime.Now включает время. Если refDate if for say сегодня в 3:00 и вы запустите его в 2:00, он вернет true. Если вы запустите в 4:00, он вернет false.

Сравните его с DateTime.Today, и он просто вернет дату, не влияя на время суток.

Кроме этого все должно быть хорошо ..

3 голосов
/ 09 января 2010

Обработка DateTime всегда сложна.

Я суммировал то, что было упомянуто до сих пор, и сделал это сообщение. Сообщество вики.

Обработка часового пояса

static bool IsFutureDateTime(DateTime dateTime) {
   // NOTE: ToUniversalTime() treats DateTimeKind.Unspecified as local time. We
   //       therefore insist that the input kind is always specified.
   if (dateTime.Kind == DateTimeKind.Unspecified) {
       string msg = "dateTime.Kind must not be DateTimeKind.Unspecified.";
       throw new ArgumentException(msg, "dateTime");
   }

   return dateTime.ToUniversalTime() > DateTime.UtcNow;
}

Сравнение только дат

static bool IsFutureDate(DateTime date) {
    return date.Date > DateTime.Today;
}
0 голосов
/ 10 января 2010

Полезна структура TimeSpan:

http://msdn.microsoft.com/en-us/library/system.timespan.aspx

Насколько точной она должна быть? С точностью до миллисекунды?

0 голосов
/ 09 января 2010
bool IsFutureDate(DateTime refDate) {
    DateTime today = DateTime.Today;
    return (refDate.Date != today) && (refDate > today);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...