Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 6 years ago.
Improve this question
I just wanna ask what is the efficient way to get the week numbers of a certain month. I have a function with month number & year as arguments, the return value of the function should be a int array which contain the week numbers of the specific month.(like following...)
public int[] getWeeksOfMonth(int month, int year){
//what's the efficient way to implement this??
}
The WEEK_OF_YEAR
attribute of the Calendar
class can be usefull for you.
Create a new date that will be the first day of the given month. Get the week of the year for this day, let say you got start
value.
Create a new date that will be the last day of the given month. Get the week of the year for this day, so now you got end
value.
Finally, create a simple int[]
that will contains values from start
to end
.
Calendar cal = Calendar.getInstance();
int maxWeeknumber = cal.getActualMaximum(Calendar.WEEK_OF_MONTH);
I am not sure whether you want to return an array of length equal to the number of days in the month, with each value being the week number for the corresponding day, or an array of all distinct week numbers for the days in the specified month. Assuming it is the former, this should work:
public static int[] getWeeksOfMonth(int month, int year)
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, 1);
int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
int weeks[] = new int[ndays];
for (int i = 0; i < ndays; i++)
{
weeks[i] = cal.get(Calendar.WEEK_OF_YEAR);
cal.add(Calendar.DATE, 1);
}
return weeks;
}
If you want an array of distinct week numbers for the days in the specified month:
public static Integer[] getWeeksOfMonth(int month, int year)
{
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, 1);
Set<Integer> weeks = new HashSet<Integer>();
int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
for (int i = 0; i < ndays; i++)
{
weeks.add(cal.get(Calendar.WEEK_OF_YEAR));
cal.add(Calendar.DATE, 1);
}
return weeks.toArray(new Integer[0]);
}
(Note this last example returns an array of Integer
objects, but it is trivial to modify it to return an array of int
instead)
I think, that this is much simpler way:
Calendar now = Calendar.getInstance();
System.out.println("Current week of month is : " +
now.get(Calendar.WEEK_OF_MONTH));