java - 如何在java中迭代日期

标签 java android date calendar

我怀疑如何在 java (Android) 中迭代这些日子。要求是我显示整周的日期。

注意:“以用户选择的日期开始”。

例如:如果日期为 29-10-2017,则输出将为 29-10-2017、30-10-2017、31-10-2017、1-11-2017、2-11-2017、3- 2017 年 11 月、2017 年 11 月 4 日。 这是整整一周。

当日期在该月内时,我能够得到这个结果,但是当日期超过该月或年时,我无法解决它们。 请帮忙,我该如何解决这个问题。

下面是我为此使用的代码 fragment :

    Calendar startCal = Calendar.getInstance();
    startCal.setTime(new Date(Long.MAX_VALUE));
    startCal.setTimeInMillis(minDate.getDateInMillis());
    Calendar endCal = Calendar.getInstance();
    endCal.setTime(new Date(Long.MAX_VALUE));
    endCal.setTimeInMillis(maxDate.getDateInMillis());

    // Add all weekend days within range to disabled days
    for (int i = 0; i < 7; i++) {
        while (startCal.before(endCal) || startCal.equals(endCal) || (startCal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)) {
            if (startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY
                    || startCal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY
                    || startCal.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY
                    || startCal.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY
                    || startCal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY
                    || startCal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) {
                int key = Utils.formatDisabledDayForKey(startCal.get(Calendar.YEAR),
                        startCal.get(Calendar.MONTH), startCal.get(Calendar.DAY_OF_MONTH));
                disabledDays.put(key, new MonthAdapter.CalendarDay(startCal));
            }
            startCal.add(Calendar.DATE, 1);
        }
    }
    int daysInMonth = startCal.getActualMaximum(Calendar.DAY_OF_MONTH); // 31

为了将它们放入一些 TextView 中,我使用下面的代码 fragment :

String date = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
    arr1 = new String[7];

    datepicker_dailog.setText(date);
//  String input = datepicker_dailog.getText().toString();

    Log.e(TAG, "Date value1 is:--- " + date);

    GregorianCalendar cal=new GregorianCalendar();
    if (cal.isLeapYear(year)) {
        dayOfMonth++;
    }

    String ar[] = date.split("[-]");
    int day = Integer.parseInt(ar[0]);
    int month = Integer.parseInt(ar[1]);
    int year1 = Integer.parseInt(ar[2]);

    Log.e(TAG, "new value is  "+ day + "  " + month + "  "+ year1);

    for(int j = 0; j < 7 ; j++) {
        date_exp(day, month, year1);
        date = day + "-"+month+"-"+year1;
        arr1[j] = date;
        Log.e(TAG, "loop is :---  "+ arr1[j]);


        Log.e(TAG, "value in loop is :---  "+ day + "  " + month + "  "+ year1);
        day++;
    }

    Log.e(TAG, "updated value is  "+ day + "  " + month + "  "+ year1);

我引用这个库来补充带有日期的日历:

https://github.com/code-troopers/android-betterpickers

这里我正在修改并存储 TextView 中的日期值,请检查一次:

    @Override
    public void onDateSet(CalendarDatePickerDialogFragment dialog, int year, int monthOfYear, int dayOfMonth) {
    String date = dayOfMonth + "-" + (monthOfYear + 1) + "-" + year;
    arr1 = new String[7];

    datepicker_dailog.setText(date);
//  String input = datepicker_dailog.getText().toString();

    Log.e(TAG, "Date value1 is:--- " + date);

    GregorianCalendar cal=new GregorianCalendar();
    if (cal.isLeapYear(year)) {
        dayOfMonth++;
    }

    String ar[] = date.split("[-]");
    int day = Integer.parseInt(ar[0]);
    int month = Integer.parseInt(ar[1]);
    int year1 = Integer.parseInt(ar[2]);

    Log.e(TAG, "new value is  "+ day + "  " + month + "  "+ year1);

    for(int j = 0; j < 7 ; j++) {
        date = day + "-"+month+"-"+year1;
        arr1[j] = date;
        Log.e(TAG, "loop is :---  "+ arr1[j]);


        Log.e(TAG, "value in loop is :---  "+ day + "  " + month + "  "+ year1);
        day++;
    }

    Log.e(TAG, "updated value is  "+ day + "  " + month + "  "+ year1);


    //------------------------------------------------------------------------------------------

    listView=(ListView)findViewById(R.id.addtime_container);
    dataModels= new ArrayList<>();
    try {
        for (int i = 0; i < 7; i++) {
            dataModels.add(new Model_Addtime(arr1[i]));

            adapter = new Adapter_addtime(dataModels, getApplicationContext());
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Model_Addtime dataModel = dataModels.get(position);

                    Snackbar.make(view, dataModel.getDate_text() + "\n", Snackbar.LENGTH_LONG).setAction("No action", null).show();
                }
            });
        }
    } catch (NumberFormatException num){
        num.printStackTrace(); num.getCause(); num.getMessage();
    }
}

最佳答案

您应该使用此代码

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
cal.add(Calendar.DATE, 2);
cal.add(Calendar.DATE, 3);

DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
System.out.println(df.format(cal.getTime());

它将自动处理月份更改和年份更改。

在 java 8 中,您可以像这样使用流 example

List<LocalDate> daysRange = Stream.iterate(startDate, date -> date.plusDays(1)).limit(numOfDays).collect(toList());

关于java - 如何在java中迭代日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47507556/

相关文章:

Java:RemoveAll(Collection c) 返回 false

android - flutter : trigger a change of screen on a websocket message

android - 调用不同类中的方法时如何获取上下文?

Android sqlite Cursor.getCount() 总是返回 1

html - 我可以使用 HTML 输入类型 "date"只收集一年吗?

Java : A List of type interface

java - JTabbedPane 内 JPanel 内的 JPanel 不显示

java - 仅打印一次 arrayList 中的重复项

android - date.getTIme() 的负值

mysql - 在 MySQL 查询中汇总小时和分钟