2017-01-04 89 views

回答

2

java.time

使用內置到Java 8和後來的java.time類。

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); 
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; 
    } 
} 
0

連老`其所有缺點Calendar'-API實現瞭解決方案:

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 

新的Java-8-API不有DAY_OF_WEEK_IN_MONTH場(嚴格意義上的),但你可以這樣做:

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 
相關問題