动态获取 Android 中过去 1 年的月份列表

Getting List of Month for Past 1 year in Android dynamically

今天的问候。

在我的应用程序中,我目前静态显示了月份列表。

但是,我想要动态的月份列表。即小于或等于当前 运行 当年月份的 12 个月。

例如,今天是 2020 年 5 月 2 日,因此,列表应如下所示:

Jun, 2019. Jul, 2019. Aug, 2019. Sep, 2019. Oct, 2019. Nov, 2019. Dec, 2019. Jan, 2020. Feb, 2020. Mar, 2020. Apr, 2020. May, 2020.

请指导我如何在 Android 中实现此功能。 谢谢

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)

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。
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,现代 类 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 类。

链接