Scorpion Scorpion - 5 months ago 45
Java Question

Get current week start and end date in Java - (MONDAY TO SUNDAY)

Today is 2014-04-06 - SUNDAY.

Output using below code is :-

Start Date = 2014-04-07

End Date = 2014-04-13

I want Output as :-

Start Date = 2014-03-31

End Date = 2014-04-06

// Get calendar set to current date and time
Calendar c = GregorianCalendar.getInstance();

System.out.println("Current week = " + Calendar.DAY_OF_WEEK);

// Set the calendar to monday of the current week
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("Current week = " + Calendar.DAY_OF_WEEK);

// Print dates of the current week starting on Monday
DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
String startDate = "", endDate = "";

startDate = df.format(c.getTime());
c.add(Calendar.DATE, 6);
endDate = df.format(c.getTime());

System.out.println("Start Date = " + startDate);
System.out.println("End Date = " + endDate);

Answer

I believe that simply using:

c.setFirstDayOfWeek(Calendar.MONDAY);

will resolve your issue... :)


EXPLANATION:

In my opinion, right now, your first day of week seems to be set on Calendar.SUNDAY. I believe that this depends on your Locale.


Thus, a (better?) alternative would be to initialise your Calendar specifying the Locale you're interested in... For example:

Calendar c = GregorianCalendar.getInstance(Locale.US);

... will give you your current output, while:

Calendar c = GregorianCalendar.getInstance(Locale.FRANCE);

... will give you your expected output ;)