1

I'm looking for the best way to populate a range of dates in my recyclerview. To elucidate, I want to fetch the all the dates from the current date to next seven days like if today is 29-07-2020 I want to list all dates from 29-07-2020 to 04-07-2020. Now in my recycler I want to get the day date and month name. I tried the below code and it list the dates as i wish but I'm unsure how to get the day date and month individually.

List<String> dateList = new ArrayList<String>();
    Calendar calendar = Calendar.getInstance();
    for (int i=0; i<31; i++) {
        calendar.add(Calendar.DATE, 1);
        SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM dd, yyyy");
        dateList.add(curFormater.format(calendar.getTime()));

        Log.i("Date" + i , dateList.get(i));
    }

3 Answers3

0

You should probably consider https://developer.android.com/reference/java/util/Calendar#get(int) and get month like this:

calendar.get(Calendar.MONTH)

or day of the month like this:

calendar.get(Calendar.DAY_OF_MONTH)

ror
  • 3,295
  • 1
  • 19
  • 27
0

Edit the format of the date by changing the String you're passing to SimpleDateFormat. For displaying only date and month you can try :

SimpleDateFormat curFormater = new SimpleDateFormat("dd MMMM");

More on formatting date here

0

I recommend you switch from the outdated legacy date-time API to the modern date-time API.

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();// Same as LocalDate.now(ZoneId.systemDefault());
        // I suggest you use the following variant and apply the required time-zone
        // LocalDate today=LocalDate.now(ZoneId.of("Etc/UTC"));

        List<String> dateList = new ArrayList<String>();

        // Define the format
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM");

        // Iterate 7-times starting today with date incrementing by 1 after each iteration
        for (LocalDate date = today; date.isBefore(today.plusDays(7)); date = date.plusDays(1)) {
            dateList.add(date.format(formatter));
        }

        // Display the content of dateList
        dateList.forEach(System.out::println);
    }
}

Output:

Monday, August
Tuesday, August
Wednesday, August
Thursday, August
Friday, August
Saturday, August
Sunday, August

If the version of your Android is not compatible with Java-8 yet, you can backport using ThreeTen-Backport. You may also need help to set it up.

However, if you want to stick to the legacy date-time API, do it as follows:

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        List<String> dateList = new ArrayList<>();

        // Define the format for only day-name and month-name 
        SimpleDateFormat curFormater = new SimpleDateFormat("EEEE, MMMM");

        // Iterate 7-times starting today with date incrementing by 1 after each iteration
        for (int i = 1; i <= 7; i++) {
            dateList.add(curFormater.format(calendar.getTime()));
            calendar.add(Calendar.DATE, 1);
        }

        // Display the content of dateList
        dateList.forEach(System.out::println);
    }
}

Output:

Monday, August
Tuesday, August
Wednesday, August
Thursday, August
Friday, August
Saturday, August
Sunday, August
Arvind Kumar Avinash
  • 71,965
  • 6
  • 74
  • 110