2009-10-25 4 views
0

Я промежуточный Java-кодер, написание библиотечного приложения Java, и по какой-то причине я просто не могу понять, должен ли я использовать метод dueDate.after(today) ИЛИ dueDate.before(today), чтобы решить, просрочена ли книга. Я получил некоторые противоречивые значения, набрав оба метода. Следовательно, я также предполагаю, что в моем коде есть и другая ошибка, поэтому было бы неплохо, если бы вы могли соответствовать тому, что является правильным методом, чтобы я мог перейти к исправлению другой ошибки.Какой метод использовать?

+1

Ничего себе, прошло пятнадцать минут, и никто еще не предложил Джоде. – erickson

+1

Черт, этот сайт (и его сообщество) просто слишком полезен! Я почти чувствую вину за отношение к числу людей, которые ответили на мой вопрос. После использования Yahoo Answer, я, конечно, не ожидал бы такого объема ответов от сообщества. – Catfish

+1

@erickson: возможно, здесь нуждается какая-то переформулировка закона godwin в Йоде – skaffman

ответ

6

Необходимо dueDate.before(today): срок платежа до сегодняшнего дня; срок платежа в прошлом, поэтому книга просрочена.

Возможно, вам легче обменивать объекты? Вы получите today.after(dueDate), и если вы прочтете это вслух, вдруг станет совершенно ясно: «если сегодня после установленного срока, то ...»

0

будет переведен на фактическую дату рассмотрения книги, , что означает, что он действительно просрочен. Это, вероятно, что вы хотите (если вы проверяете для истинного)

другой сторона вещей

dueDate.after(today) бы перевести к фактическим DueDate книги, произошедшей после сегодняшнего дня, а это означает, что она еще не закончена из-за.

0

Единственная разница между !dueDate.after(today) и dueDate.before(today) - результат, когда обе даты совпадают - предположительно книга не просрочена, когда она возвращается в установленный срок, поэтому dueDate.before(today) должен быть правильным.

Что касается ваших неуточненных других проблем: знаете ли вы, что java.util.Date представляет собой точку с точностью до миллисекунды, а не дату календаря? Это означает, что для того, чтобы использовать методы сравнения для дат календаря, вы должны быть уверены, что при создании экземпляров Date вы установите нулевые компоненты времени. Другой причиной проблем могут быть различия в часовых поясах.

0

Это зависит от того, чего вы хотите достичь. Должна ли дата, которую вы хотите установить при предоставлении книги? Срок выполнения определяется с датой кредитования книги, поэтому я бы попробовал такой подход, как book.isDue(today), предполагая, что объект книги содержит сроки кредитования и сроки в качестве атрибутов.

С подобными вопросами это помогает, если вы сделаете это явным для себя, какие объекты задействованы и каковы их отношения, прежде чем вы будете проектировать действия между объектами.

1

Следует помнить, что before и after методы выполнения сравнения < (или >), а не <= (или >= сравнения). Именно это подразумевается под словом «строго» в документации API.

Также объекты Java Date действительно являются моментальными моментами, а не тем, что люди обычно считают «датой». То есть, это будет не просто сравнивать день, а время суток.

Если вы хотите сравнить только день, не проверяя время в течение этого дня, создайте все ваши сроки, чтобы быть в определенное время, например, полночь. Например, предположим, что книга из-за 26 октября срок может быть полночь, 27 октября

boolean overdue = !now.before(dueDate); 

Несколько неловких счета отрицание для случая, когда он теперь точно 12:00 утра 27 октября