I got below code on stackoverflow which return total number of week in current year, but it is hardcoded which\'ll not work on 2014 and 2016. How I get total number of week
Why not to use getActualMaximum
property of Calendar
?
private int getWeeksCount(final int year, final Locale locale)
{
Calendar calendar = Calendar.getInstance(locale);
calendar.set(Calendar.YEAR, year);
int totalWeekNumber = calendar.getActualMaximum(Calendar.WEEK_OF_YEAR);
return totalWeekNumber;
}
You can use the Calendar.getActualMaximum(int) method to get the total number of weeks in the current year as follows:
int totalNumberOfWeeks = Calendar.getInstance().getActualMaximum(Calendar.WEEK_OF_YEAR);
Simple.
I have a DatePickerFragment, its onDateSet function
public void onDateSet(DatePicker view, int year, int month, int day) {
((Main) getActivity()).setWeek(year, month, day);
}
only returns year, month and day only. So I have to do the following to get the week.
public void getWeek(int year, int month, int day){
final Calendar c = Calendar.getInstance();
c.set(year, month, day);
int week = c.get(Calendar.WEEK_OF_YEAR);
}
You can use something like
private Calendar getCalendar(int year, int month, int day) {
Calendar calendar = Calendar.getInstance(Locale.GERMAN);
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(year, month, day);
return calendar;
}
private int getTotalWeeksInYear(int year) {
return getCalendar(year, Calendar.DECEMBER, 31).get(Calendar.WEEK_OF_YEAR);
}
Remember that definition of Week of Year is local dependent. It means that in different locales returned value of get(Calendar.WEEK_OF_YEAR) will be different. For example in Locale.GERMAN according to DIN 1355-1 / ISO 8601 the first Week of Year is the week contains 4 or more days in the new year. For the Locale.US the first Week of Year is the week where the 1 January belongs to.
just use current year in this method:
int year = Calendar.getInstance().get(Calendar.YEAR);
cal.set(Calendar.YEAR, year);
Leave rest the same as in your example.
the fastest way is: Very important to set properly the Calendar depending from where are you from, because of numbering of weeks is determined to given standards. For example in Europ is ISO 8061. It means that 1 week of the year beginn when 01.01.RRRR is Thursday or further, and week beginns from Monday.
GregorianCalendar gregorianCalendar = new GregorianCalendar(year,12,31);
gregorianCalendar.setFirstDayOfWeek(Calendar.MONDAY); // week beginn from Monday
gregorianCalendar.setMinimalDaysInFirstWeek(4); // 1week mininum from Thursday
int totalWeeks = gregorianCalendar.getMaximum(Calendar.WEEK_OF_YEAR);