首页 > 解决方案 > 如何在android中查找json日期列表是否一个月

问题描述

抱歉我的英语不好,我有来自 json 的日期列表

{
    "data": [
        {
            "lead_id": "1763",
            "name": "Gaurav Kumar",
            "date": "16-02-2020",
            "time": "10:00 To 11:00 AM",
        },
        {
            "lead_id": "1759",
            "name": "Test",
            "date": "04-02-2020",
            "time": "10:00 To 11:00 AM",
        },
        {
            "lead_id": "1751",
            "name": "kavita sharma",
            "date": "08-02-2020",
            "time": "10:00 To 11:00 AM", 
        },
        {
            "lead_id": "1751",
            "name": "kavita sharma",
            "date": "09-02-2020",
            "time": "10:00 To 11:00 AM",
        }
    ]
}

下面的代码帮助我找到当前日期

Calendar calendar = Calendar.getInstance();
        Date today = calendar.getTime();

        @SuppressLint("SimpleDateFormat")
        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");

        todayAsString = dateFormat.format(today);

        System.out.println(todayAsString);

但我想知道如何检查日期列表是否为同一月份。

//这是我用来检查当前日期的代码,但我想检查所有日期是否都在同一个月份。请让我知道我该怎么做

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("https://delhidailyservice.com/api/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        APIService request = retrofit.create(APIService.class);
        Call<LeadData> call = request.leadData(prefConfig.readLoginId());
        call.enqueue(new Callback<LeadData>() {
            @Override
            public void onResponse(Call<LeadData> call, Response<LeadData> response) {

               /* new Handler().postDelayed(new Runnable() {
                    public void run() {
                        // if (isAdded()) {
                        pDialog.dismiss();
                        // }
                    }
                }, 5000);*/

                pDialog.dismiss();

                LeadData allEvent = response.body();
                allEventData = (List<Leads>) allEvent.getData();
//                Log.d("Error", ""+allEventData.size());

                allEventDatanew.clear();
                for (int i = 0; i < allEventData.size(); i++) {

                    if (todayAsString.equalsIgnoreCase(allEventData.get(i).getDate())) {
                        Leads allevent = new Leads();


                        String service = allEventData.get(i).getService();
                        String date = allEventData.get(i).getDate();
                        String name = allEventData.get(i).getName();
                        String time = allEventData.get(i).getTime();
                        String city = allEventData.get(i).getCity();
                        String status = allEventData.get(i).getStatus();
                        String credit = allEventData.get(i).getCredit();
                        String address = allEventData.get(i).getAddress();
                        String id = allEventData.get(i).getLeadId();

                        try {
                            //String details = allEventData.get(i).getDetail();

                            //abcd = Html.fromHtml(details).toString();

                            // tv_detail.setText(abcd);


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


                        allevent.setService(service);
                        allevent.setDate(date);
                        allevent.setName(name);
                        allevent.setTime(time);
                        allevent.setCity(address + " , " + city);
                        allevent.setStatus(status);
                        allevent.setCredit(credit);
                        allevent.setLeadId(id);


                        allEventDatanew.add(allevent);


                    }

                }
                // Log.d("Error1", ""+allEventDatanew.size());

                individualDataAdapter = new LeadAdapter(allEventDatanew, getContext());

                recyclerViewIndividualEvent.setAdapter(individualDataAdapter);
                individualDataAdapter.notifyDataSetChanged();

标签: javaandroid

解决方案


java.time 和 ThreeTenABP

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");

    List<Leads> allEventData = Arrays.asList(new Leads("16-02-2020"),
            new Leads("04-02-2020"), new Leads("08-02-2020"),
            new Leads("09-02-2020"));

    if (allEventData.isEmpty()) {
        System.out.println("No data");
    } else {
        YearMonth month = YearMonth.parse(allEventData.get(0).getDate(), dateFormatter);
        boolean otherMonthFound = false;
        for (Leads lead : allEventData) {
            if (! YearMonth.parse(lead.getDate(), dateFormatter).equals(month)) {
                otherMonthFound = true;
                break;
            }
        }
        if (otherMonthFound) {
            System.out.println("They are not all in the same month");
        } else {
            System.out.println("They are all in the same month " + month);
        }
    }

此片段的输出是:

他们都在同一个月 2020-02

我从我使用的类中省略了其他字段,Leads因为它们对解决方案没有任何影响。

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

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接


推荐阅读