Конфликты при отображении дат в Android с помощью ThreeTen - PullRequest
0 голосов
/ 25 октября 2018

Я использую ThreeTen в Android для отображения 1-недельных дат с текущей даты.Однако проблема в том, что даты не отображаются в правильном порядке.

Вот мой код для дат дней 1 недели с текущей даты:

public List<LocalDate> getWeekDays() {

    ZoneId z = ZoneId.of("Pacific/Auckland");  // Or ZoneId.of( "Africa/Tunis" )
    LocalDate today = LocalDate.now( z ) ;

   LocalDate localDate = today.with( org.threeten.bp.temporal.TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) ) ;     
    List< LocalDate > dates = new ArrayList<>( 7 ) ;
    for( int i = 0 ; i < 7 ; i ++ ) {
        localDate = localDate.plusDays( i ) ;
        dates.add( localDate ) ;
    }
        return dates;

}

Вот изображение отображения дат, пожалуйстапроверить это:

enter image description here

1 Ответ

0 голосов
/ 25 октября 2018

Недостаток логики в for loop

Вы добавляете дни к предыдущей дате , а не к дате начала .

В вашем цикле i проходит через значения от 0 до 6. Вы начинаете с воскресенья, 21 октября. В первый раз в вашем цикле вы добавляете 0 дней, поэтому 21 октября остается верным (правильно).В следующий раз, когда вы добавите 1 день, получите 22 октября, также верно для понедельника.В следующий раз вы добавите 2 дня и получите 24 октября. Затем вы добавите 3 дня, 4 дня и т. Д. Это объясняет ваши результаты.

Два возможных исправления.Измените это:

    localDate = localDate.plusDays( i ) ;
    dates.add( localDate ) ;

… на это:

    LocalDate ld = localDate.plusDays( i ) ;  // Add `i` number of days to the *start* date, not the incrementing date. 
    dates.add( ld ) ;

или это:

    dates.add( localDate ) ;
    localDate = localDate.plusDays( 1 ) ; // only add 1 day to previous date

В первом случае этовероятно, лучше всего изменить имя переменной localDate на startDate для ясности.

...