Skip to content Skip to sidebar Skip to footer

Get Start Day And End Day Of A Week? [java]

I am developing an app that constantly monitors the user's physical activity and inactivity levels. I am trying to figure out out to get the starting and ending day of a week when

Solution 1:

It is as simple as doing:

calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());

What is considered the first day of the week depends on the Locale used.

To get the last day of the week then do:

calendar.add(Calendar.DAY_OF_YEAR, 6);

Solution 2:

You just need to use the Calendar.DAY_OF_WEEK parameter to work out how many days to subtract - for example to print the start and end of the current week:

publicstaticvoidmain(String[] args) {
    Calendar calendar = GregorianCalendar.getInstance();

    // Subtract number of days to start of week
    calendar.add(Calendar.DATE, -(calendar.get(Calendar.DAY_OF_WEEK)-1));

    String output = "" + calendar.get(Calendar.DAY_OF_MONTH) + " "
            + calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.UK);
    calendar.add(Calendar.DATE, 6);
    output += " - " + calendar.get(Calendar.DAY_OF_MONTH) + " "
            + calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.UK);
    System.out.println(output);
}

Solution 3:

java.time

The legacy date-time API (java.util date-time types and their formatting type, SimpleDateFormat etc.) is outdated and error-prone. It is recommended to stop using it completely and switch to java.time, the modern date-time API.

Solution using java.time, the modern API:

For ISO 8601 week (Monday to Sunday), you can use ChronoField.DAY_OF_WEEK as 1 for the first day of the week and as 7 for the last day of the week.

import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.ChronoField;

publicclassMain {
    publicstaticvoidmain(String[] args) {
        LocalDatedate= LocalDate.of(2017, Month.MARCH, 3);

        LocalDatefirstDayOfTheWeek= date.with(ChronoField.DAY_OF_WEEK, 1);
        System.out.println(firstDayOfTheWeek); // 2017-02-27LocalDatelastDayOfTheWeek= date.with(ChronoField.DAY_OF_WEEK, 7);
        System.out.println(lastDayOfTheWeek); // 2017-03-05
    }
}

Alternatively,

import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.WeekFields;

publicclassMain {
    publicstaticvoidmain(String[] args) {
        LocalDatedate= LocalDate.of(2017, Month.MARCH, 3);

        LocalDatefirstDayOfTheWeek= date.with(WeekFields.ISO.getFirstDayOfWeek());
        System.out.println(firstDayOfTheWeek); // 2017-02-27LocalDatelastDayOfTheWeek= firstDayOfTheWeek.plusDays(6);
        System.out.println(lastDayOfTheWeek); // 2017-03-05
    }
}

Use WeekFields#of(Locale locale) to get the Locale-specific result (thanks, Ole V.V. for the suggestion):

import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.WeekFields;
import java.util.Locale;

publicclassMain {
    publicstaticvoidmain(String[] args) {
        LocalDatedate= LocalDate.of(2017, Month.MARCH, 3);

        System.out.println("France:");
        LocalDatefirstDayOfTheWeek= date.with(WeekFields.of(Locale.FRANCE).getFirstDayOfWeek());
        System.out.println(firstDayOfTheWeek);

        LocalDatelastDayOfTheWeek= firstDayOfTheWeek.plusDays(6);
        System.out.println(lastDayOfTheWeek);

        System.out.println();
        System.out.println("USA:");
        firstDayOfTheWeek = date.with(WeekFields.of(Locale.US).getFirstDayOfWeek());
        System.out.println(firstDayOfTheWeek);

        lastDayOfTheWeek = firstDayOfTheWeek.plusDays(6);
        System.out.println(lastDayOfTheWeek);
    }
}

Output:

France:2017-02-272017-03-05USA:2017-03-052017-03-11

The documentation of WeekFields.ISO.getFirstDayOfWeek() says:

Gets the first day-of-week.

The first day-of-week varies by culture. For example, the US uses Sunday, while France and the ISO-8601 standard use Monday. This method returns the first day using the standard DayOfWeek enum.

Learn more about java.time, the modern date-time API from Trail: Date Time.


Solution 4:

Thanks to @BarrySW19 and @john16384, here is the working method:

private String formatDate(List<Activity> activities) {
    Calendar calendar = Calendar.getInstance(Locale.UK);
    Date date = activities.get(activities.size() - 1).getDate();
    calendar.setTime(date);
    calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());

    String output = "" + calendar.get(Calendar.DAY_OF_MONTH) + " "
            + calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.UK);

    calendar.add(Calendar.DAY_OF_YEAR, 6);

    output += " - " + calendar.get(Calendar.DAY_OF_MONTH) + " "
            + calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.UK);
    return output;
}

Post a Comment for "Get Start Day And End Day Of A Week? [java]"