2015-05-29 3 views
1

Я создал специальную сетку данных, и я добавил несколько фильтров. Один фильтр у меня есть фильтр даты, для ячеек, отображающих даты. Моя проблема заключается в том, что клетка может отображатьСравнение дат в зависимости от формата

Displayed date value : 21/01/2014 , Actual date object value : 21-01-2014 16:32:0000 

Конечно пользователь не знает о часовом части, поэтому, когда он/она обеспечивает значение фильтра в тот же день, месяц и год ожидает увидеть согласованные элементы. Это, конечно, не произойдет, поскольку компаратор сравнивает объекты даты с разными часовыми значениями.

Что я хочу спросить, есть ли предпочтительный способ сравнить два объекта даты в зависимости от формата отображения? Я могу реализовать эту логику, мне было просто любопытно, если какая-то реализация уже существует.

Update

У меня есть две даты объекты:

  1. 21-01-2014 16: 32: 0000
  2. 21-01-2014 00: 00: 0000

и формат отображения: «dd/MM/yyyy»

Есть ли предпочтительный способ объединения этих двух дат в зависимости от формата ? Это означает только сравнение частей даты, которые включены в формат. В приведенном выше сравнении можно сравнить только день (дд), месяц (ММ), год (гггг).

Я повторяю, что могу реализовать что-то простое, мне просто интересно, если кто-то еще столкнулся с этим раньше и нашел общее решение.

+2

Я не мог понять ваше требование – SpringLearner

+0

Я обновил свой вопрос – alkis

ответ

1

Если вы ищете решение на стороне клиента (где код Java компилируется в JavaScript, компилятором GWT), Krzysztof's решение не будет работать. GWT does not support Calendar and related classes на стороне клиента. SimpleDateFormat не поддерживается - DateTimeFormat has to be used instead.

Однако в GWT имеется полезный класс полезности: CalendarUtil. Он имеет метод isSameDate(java.util.Date date0, java.util.Date date1), который делает именно то, что вы хотите:

Проверьте, если две даты представляют собой ту же дату того же года, даже если они имеют разные времена.

Кстати, он также имеет resetTime(java.util.Date date) метод, который может быть полезным в вашем случае использования:

Переустановка даты не имеют времени модификаторов.

+1

Я меняю принятый ответ на этот вопрос. Все предыдущие ответы были уже известны мне (это не снижает ценность этих ответов, конечно, просто я хотел что-то немного менее распространенное). – alkis

+0

Вопрос был о java, а не GWT. Конечно, вы можете использовать библиотеку для всего, но использовать некоторую библиотеку только потому, что она имеет один тривиальный метод, это смешно. –

+0

Почему downvote? Вы уверены, что понимаете взаимосвязь между Java и GWT? Пожалуйста, не спускайте вниз (кто бы вы ни были) слепо, если вы этого не сделаете. Я предположил, что вопрос о GWT основан на теге, который использует OP. Кроме того, часть «настраиваемых данных». Я согласен, что это должно быть более четко указано в вопросе, но, похоже, это правильный вывод, поскольку OP с радостью использовал класс, связанный с GWT. Я, конечно, согласен, что нельзя включать огромную библиотеку только для одного простого метода утилиты, и OP, вероятно, тоже согласен, но он уже использует GWT. –

1

Перед сравнением изменения date таким образом:

GregorianCalendar gc = new GregorianCalendar(); 
    gc.setTime(date); 
    gc.set(GregorianCalendar.HOUR_OF_DAY, 0); 
    gc.set(GregorianCalendar.SECOND, 0); 
    gc.set(GregorianCalendar.MINUTE, 0); 
    gc.set(GregorianCalendar.MILLISECOND, 0); 

    date = gc.getTime(); 

Он будет обрезать его до того же значения дня, так что вы можете сравнить две даты, если они одинаковы, но так как вы урезали их к дневному значению, эти даты будут возвращать true при сравнении независимо от предыдущих часов, минут, секунд и миллисекунд.

Или вы можете сделать:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 

    Date date1 = ...; 

    Date date2 = ...; 

    if (sdf.format(date1).equals(sdf.format(date2))) { 
     // dates are equal in the day value 
    } 
+0

Да, это тоже я тоже думаю, но мне было любопытно, если что-то лучше существует. Upvoted. – alkis

1

Используйте LocalDate для любой обработки даты и времени на Java. Прочтите this сообщение, почему выгодно использовать LocalDate по другим старым параметрам.

Сказав, что, все, что вам нужно сделать, чтобы сравнить ваши Date (ы) в формате запрошенной (дд/мм/гггг) заключается в следующем:

Пусть date1 и date2 быть Date объекты, которые имеют ваш даты ввода.

LocalDate lD1 = new LocalDate(date1); 
LocalDate lD2 = new LocalDate(date2); 

String comparisonFormat = "dd/MM/yyyy"; 

boolean result = lD1.toString(comparisonFormat).equals(lD2.toString(comparisonFormat)); 

Вы могли бы сделать это в одном слое, если это ваша вещь, но я думаю, что это более читаемо.

Смежные вопросы