2016-03-03 101 views
1

我有String日期數組。 我需要填寫3個ListViews, 今天列表,從本週開始的日期以及本月的日期。 格式是:dd // mm // yy。 例如:如何根據今天/本週/本月對日期數組進行排序 - android

{"03.02.16","02.03.16","03.03.16","29.02.16"} 

「16年3月3日」 今日-is。 「29.02.16」 - 來自上個月,但是這是這一週的 ,所以我需要將它添加到本週的列表中。 「02.03.16」 - 需要在本週和本月清單中的 。

有一種方法可以在java/android中對日期進行排序嗎?

回答

1

這是一個使用JSR-310的實施。在Android上,您可以使用傑克沃頓的端口ThreeTenABP

DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yy"); 

final List<String> yourDates = someDates(); 

final List<LocalDate> dates = parseDates(yourDates); 

final LocalDate today = getToday(dates); 
final List<LocalDate> thisWeek = getDatesThisWeek(dates); 
final List<LocalDate> thisMonth = getDatesThisMonth(dates); 

... 

@Nullable 
private LocalDate getToday(List<LocalDate> dates) { 
    final LocalDate today = LocalDate.now(); 
    for (LocalDate date : dates) { 
     if (today.equals(date)) { 
      return date; 
     } 
    } 

    return null; 
} 

private List<LocalDate> getDatesThisWeek(List<LocalDate> dates) { 
    final TemporalField dayOfWeek = WeekFields.of(Locale.getDefault()).dayOfWeek(); 
    final LocalDate start = LocalDate.now().with(dayOfWeek, 1); 
    final LocalDate end = start.plusDays(6); 

    return getDatesBetween(dates, start, end); 
} 

private List<LocalDate> getDatesThisMonth(List<LocalDate> dates) { 
    final LocalDate now = LocalDate.now(); 
    final LocalDate start = now.withDayOfMonth(1); 
    final LocalDate end = now.withDayOfMonth(now.lengthOfMonth()); 

    return getDatesBetween(dates, start, end); 
} 

private List<LocalDate> getDatesBetween(List<LocalDate> dates, LocalDate start, LocalDate end) { 
    final List<LocalDate> datesInInterval = new ArrayList<>(); 

    for (LocalDate date : dates) { 
     if (start.equals(date) || end.equals(date) || (date.isAfter(start) && date.isBefore(end))) { 
      datesInInterval.add(date); 
     } 
    } 

    return datesInInterval; 
} 

private List<LocalDate> parseDates(List<String> stringDates) { 
    final List<LocalDate> dates = new ArrayList<>(stringDates.size()); 
    for (String stringDate : stringDates) { 
     dates.add(LocalDate.parse(stringDate, FORMATTER)); 
    } 

    return dates; 
} 

更新:你還可以找到執行here

相關問題