Получение списка месяцев за прошедший 1 год в Android динамически - PullRequest
0 голосов
/ 02 мая 2020

Приветствия дня.

В моем приложении я статически отображал список месяцев.

Но я хочу динамический список месяцев. т.е. 12 месяцев, которые меньше или равны текущему текущему месяцу текущего года.

Например, сегодня 2 мая 2020 года, поэтому список должен быть следующим:

июнь 2019 Июль 2019. август 2019. сентябрь 2019. окт 2019. ноя 2019. De c, 2019. январь 2020 г. февраль 2020 г. март 2020 г. апрель 2020 г. май 2020 г.

Пожалуйста, объясните, как мне добиться этого в Android. Спасибо.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

java .time и ThreeTenABP

final int monthsInYear = 12;
YearMonth currentMonth = YearMonth.now(ZoneId.of("Pacific/Kosrae"));
YearMonth sameMonthLastYear = currentMonth.minusYears(1);
List<YearMonth> months = new ArrayList<>(monthsInYear);
for (int i = 1; i <= monthsInYear; i++) {
    months.add(sameMonthLastYear.plusMonths(i));
}

System.out.println(months);

Выход:

[2019-06, 2019-07, 2019-08, 2019-09, 2019-10 , 2019-11, 2019-12, 2020-01, 2020-02, 2020-03, 2020-04, 2020-05]

Я рекомендую оставить в своем списке YearMonth объектов. Для форматированного вывода используйте DateTimeFormatter:

    DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMM, uuuu", Locale.ENGLISH);
    for (YearMonth ym : months) {
        System.out.println(ym.format(monthFormatter));
    }
Jun, 2019
Jul, 2019
Aug, 2019
... (cut) ...
Apr, 2020
May, 2020

Вопрос: java .time не требует Android API-уровень 26?

java .time прекрасно работает как на старых, так и на новых Android устройствах. Для этого требуется как минимум Java 6 .

  • В Java 8 и более поздних версиях и на более новых Android устройствах (от уровня API 26) современный встроенный API -in.
  • В не-1066 * Java 6 и 7 получите ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. ссылки внизу).
  • Вкл. (Старше) Android используйте версию ThreeTen Backport Android. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из org.threeten.bp с подпакетами.

Ссылки

1 голос
/ 02 мая 2020
val formatter = SimpleDateFormat("MMM, yyyy")
val list = arrayListOf<String>()
Calendar.getInstance().let {
    calendar ->
    calendar.add(Calendar.MONTH, -11)
    for (i in 0 until 12) {
        list.add(formatter.format(calendar.timeInMillis))
        calendar.add(Calendar.MONTH, 1)
    }
}
print(list)
...