2014-10-29 3 views
0

Требование: имеют два типа дат, которые помогают выбрать дату начала и дату окончания. Список дат между этим диапазоном должен отображаться в таблице.Показать список даты, выбранный в Ваадине?

Помощь меня с раствором для Vaadin 7.

public List<Date> getDatesBetween(final Date date1, final Date date2) { 
     List<Date> dates = new ArrayList<Date>(); 

     Calendar calendar = new GregorianCalendar() {{ 
      set(Calendar.YEAR, date1.getYear()); 
      set(Calendar.MONTH, date1.getMonth()); 
      set(Calendar.DATE, date1.getDate()); 
     }}; 

     while (calendar.get(Calendar.YEAR) != date2.getYear() && calendar.get(Calendar.MONTH) != date2.getMonth() && calendar.get(Calendar.DATE) != date2.getDate()) { 
      calendar.add(Calendar.DATE, 1); 
      dates.add(new Date(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE))); 
     } 

     return dates; 
    } 

Этот список будет отображаться с помощью:

table=new Table("Employee dates!"); 
    table.removeAllItems(); 

    /// ...... within the loop 
    table.addItem(); 
    /// ...... within the loop 

NOTE: an alternative way of getting the list of dates is appreciated. 
+0

я попытался с помощью календаря КАЛЕНДАРЬ = новый GregorianCalendar() и установите год месяц и дату в списке дат, и создал время цикла: в то время (calendar.get (Calendar.YEAR)! = Date2.getYear() && calendar.get (Calendar.MONTH)! = Date2.getMonth() && calendar.get (Calendar.DATE)! = Date2.getDate()), и это входит в функцию который вернет этот список дат и добавит его в таблицу. – sabby

+0

Пожалуйста, отредактируйте свой вопрос и напишите во весь ваш код, его легче читать! – Krayo

ответ

0

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

public List<Date> getDatesBetween(final Date date1, final Date date2) { 
    List<Date> dates = new ArrayList<Date>(); 
    Calendar c = Calendar.getInstance(); 
    c.setTime(date1); 

    //dates.add(date1); //use it if you need the first day 
    while(c.getTime().compareTo(date2) < 0) { //date1 is lesser than date2, use <= if you need the last day 
     c.add(Calendar.DATE, 1); 
     dates.add(c.getTime()); 
    } 

    return dates; 
} 

Теперь поставить эти ценности должным образом в таблице, так как это не чисто «вещь» s

Table tableDates = new Table("Dates from ... to ..."); 
tableDates.setSizeFull(); 
tableDates.setImmediate(true); 
tableDates.addContainerProperty("date", Date.class, null); 
tableDates.setColumnHeader("date", "Date"); 

, а затем для каждой даты вы можете сделать

Object[] tableRow = new Object[] {date}; //date is a Date object..you can merge this in the "getDatesBetween" method above 
tableDates.addItem(tableRow , null); //null -> autogenerated id 
+0

Я думаю, что ваш оператор while представляет собой бесконечный цикл, дата1 никогда не изменяется. – Krayo

+0

Хорошая точка .. я должен был использовать «c.getTime()». Я исправлю это. благодаря – MarcelloGarini

0

Основная проблема заключается в том, что методы класса Date устарели (и вводят в заблуждение).
getYear() Javadoc пишет: год, представленный этой дате, минус 1900.
Кроме того, вы должны заменить && с || в выражении заявление в то время.

Мое предложение:

public static List<Date> getDatesBetween(final Date date1, final Date date2) { 
    List<Date> dates = new ArrayList<Date>(); 

    Calendar cal1 = new GregorianCalendar(); 
    cal1.setTime(date1); 
    Calendar cal2 = new GregorianCalendar(); 
    cal2.setTime(date2); 

    while (cal1.get(Calendar.YEAR) != cal2.get(Calendar.YEAR) 
      || cal1.get(Calendar.MONTH) != cal2.get(Calendar.MONTH) 
      || cal1.get(Calendar.DATE) != cal2.get(Calendar.DATE)) { 
     cal1.add(Calendar.DATE, 1); 
     dates.add(cal1.getTime()); 
    } 

    return dates; 
} 
Смежные вопросы