I'm trying to find out how many Mondays, for example, there are in a specific month of a specific year. Is there a library to import in java of a calendar of a specific year?
Asked
Active
Viewed 494 times
0
-
1See here http://stackoverflow.com/q/8040790/6036446 – Juan C Nuno Jan 04 '17 at 05:55
-
@JuanCNuno Not quite a duplicate, as the other asked specifically for the Joda-Time library. – Basil Bourque Feb 07 '17 at 22:03
3 Answers
2
java.time
Using the java.time classes built into Java 8 and later.
YearMonth month = YearMonth.of(2017, 1);
LocalDate start = month.atDay(1).with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
int count = (int) ChronoUnit.WEEKS.between(start, month.atEndOfMonth()) + 1;
System.out.println(count);

Basil Bourque
- 303,325
- 100
- 852
- 1,154

Pradnyarani
- 302
- 1
- 8
0
Java 7 + JodaTime
import org.joda.time.DateTimeConstants;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import java.util.Date;
public class Test {
public static int getNumberOfMondays(Date start, Date end) {
LocalDate startDate = LocalDate.fromDateFields(start);
LocalDate endDate = LocalDate.fromDateFields(end);
int days = Days.daysBetween(startDate, endDate).getDays();
int mondayCount = 0;
//Get number of full weeks: 1 week = 1 Monday
mondayCount += days / 7;
int remainder = days % 7;
if (startDate.dayOfWeek().get() == DateTimeConstants.MONDAY || startDate.dayOfWeek().get() > (startDate.dayOfWeek().get() + remainder) % 8) {
mondayCount++;
}
return mondayCount;
}
}

Anton Dovzhenko
- 2,399
- 11
- 16
0
Even the old `Calendar´-API with all its disadvantages enables a solution:
int year = 2017;
int month = Calendar.JANUARY;
int dow = Calendar.MONDAY;
GregorianCalendar gcal = new GregorianCalendar(year, month, 1);
while (gcal.get(Calendar.DAY_OF_WEEK) != dow) {
gcal.add(Calendar.DAY_OF_MONTH, 1);
}
System.out.println(gcal.getActualMaximum(Calendar.DAY_OF_WEEK_IN_MONTH)); // 5
The new Java-8-API does not have a DAY_OF_WEEK_IN_MONTH-field (in strict sense), but you can do this:
int year = 2017;
int month = 1;
LocalDate ld1 =
LocalDate.of(year, month, 1).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
LocalDate ld2 =
LocalDate.of(year, month, 1).with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY));
System.out.println(ChronoUnit.WEEKS.between(ld1, ld2) + 1); // 5

Meno Hochschild
- 42,708
- 7
- 104
- 126