日期组列表到周数? [安卓]

问题描述 投票:0回答:1

我正在开发一个将显示数据列表的 Android 应用程序。例如,如果您今天(28.05.2018)(MO)开始使用应用程序,我必须计算周数并在本周添加 7 天,或者您从周五开始,我必须在本周添加 2 天。

我尝试过这个方法https://stackoverflow.com/a/42733001/9259044 但这对我来说是错误的。首先,我添加了日期和

 TreeMap<Integer, List<Date>> dateHashMap = new TreeMap<>();
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    List<Date> spDates = new ArrayList<>();


    try {


        spDates.add(sdf.parse("02/06/2018"));
        spDates.add(sdf.parse("01/06/2018"));
        spDates.add(sdf.parse("31/05/2018"));
        spDates.add(sdf.parse("30/05/2018"));
        spDates.add(sdf.parse("29/05/2018"));

        spDates.add(sdf.parse("28/05/2018"));
        spDates.add(sdf.parse("27/05/2018"));

        spDates.add(sdf.parse("26/05/2018"));
        spDates.add(sdf.parse("25/05/2018"));


    } catch (ParseException e) {
        e.printStackTrace();
    }

我将 weekOfYear 与我的日期进行比较,但这是错误的。

for (int i = 0; i < spDates.size(); i++) {
        List<Date> datesList = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(spDates.get(i));

        int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);


        for (Date date : spDates) {
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            if (weekOfYear == c.get(Calendar.WEEK_OF_YEAR)) {
                datesList.add(date);
            }
        }

        dateHashMap.put(weekOfYear, datesList);


    }

   Log.d("DATE",dateHashMap.toString());

您知道如何将我的日期分组到周数吗?

java android week-number date
1个回答
0
投票

我想你想要这个:

    LocalDate today = LocalDate.now(ZoneId.of("Europe/Istanbul"));
    
    int weekNumber = today.get(WeekFields.ISO.weekOfYear());
    System.out.println("Week no. " + weekNumber);
    
    LocalDate[] days = today.datesUntil(today.with(TemporalAdjusters.next(DayOfWeek.MONDAY)))
            .toArray(LocalDate[]::new);
    System.out.println(Arrays.toString(days));

今天运行(5 月 28 日星期一)并打印出来

Week no. 22
[2018-05-28, 2018-05-29, 2018-05-30, 2018-05-31, 2018-06-01, 2018-06-02, 2018-06-03]

它为您提供从今天(含在内)到下周一(不含)的所有日期。如果星期一是一周的第一天,则表示本周剩余的天数。

我正在使用并推荐 java.time,现代 Java 日期和时间 API。我发现它比您正在使用的旧日期和时间类

Date
SimpleDateFormat
Calendar
更好用。 Java 8 中引入 java.time 正是因为 Java 1.0 和 1.1 中的旧类太麻烦且容易出错。

问题:java.time 不需要 Android API 级别 26 吗?

编辑:来自评论:

字段需要 API 级别 26

java.time 在较旧和较新的 Android 设备上都能很好地工作,包括低于 26 的 API 级别。

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 Oreo 开始)中,现代 API 是内置的。
  • 在旧版 Android 上使用脱糖,请参阅下面的链接。或者使用下面提到的 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保使用子包从
    org.threeten.bp
    导入日期和时间类。
  • 在非 Android Java 6 和 7 中获取 ThreeTen Backport,即现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。

链接

© www.soinside.com 2019 - 2024. All rights reserved.