获得一个月的第一个星期一

Jak*_*ter 4 java

我希望得到特定月份/年的第一个星期一的日子.

是)我有的:

我基本上有两个int变量,一个代表年份,一个代表月份.

我想要的是:

我想知道本月的第一个星期一,最好是int或Integer值.

例如:

我有2014年和1月(1月),这个月的第一个星期一是6号,所以我想返回6.

问题:

我以为我可以这样做,Calendar但我已经无法设置只有年和月的日历.此外,我不知道如何实际返回月/年的第一个星期一Calendar.

我已经尝试过了:

Calendar cal = Calendar.getInstance();
cal.set(this.getYear(),getMonth(), 1);
int montag = cal.getFirstDayOfWeek();
for( int j = 0; j < 7; j++ ) {
    int calc = j - montag;
    if( calc < 0 ) {
        calc += 6;
    }
    weekDays[calc].setText(getDayString(calc));
}
Run Code Online (Sandbox Code Playgroud)

Prz*_*mek 15

Java.time

使用java.timeJava 8和TemporalAdjuster中内置的库.请参阅教程.

import java.time.DayOfWeek;
import java.time.LocalDate;
import static java.time.temporal.TemporalAdjusters.firstInMonth;

LocalDate now = LocalDate.now(); //2015-11-23
LocalDate firstMonday = now.with(firstInMonth(DayOfWeek.MONDAY)); //2015-11-02 (Monday)
Run Code Online (Sandbox Code Playgroud)

如果您需要添加时间信息,可以使用任何可用LocalDateLocalDateTime转换方式

firstMonday.atStartOfDay() # 2015-11-02T00:00
Run Code Online (Sandbox Code Playgroud)


Oct*_*ami 12

getFirstDayOfWeek()返回哪一天用作当前语言环境的开头.有些人认为周一的第一天,周日的其他人等.

这看起来你只需要设置它DAY_OF_WEEK = MONDAY,DAY_OF_WEEK_IN_MONTH = 1因为它会给你这个月的第一个星期一.要对年份执行相同操作,请先将MONTH值设置为JANUARY然后重复上述操作.

例:

private static Calendar cacheCalendar;

public static int getFirstMonday(int year, int month) {
    cacheCalendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    cacheCalendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
    cacheCalendar.set(Calendar.MONTH, month);
    cacheCalendar.set(Calendar.YEAR, year);
    return cacheCalendar.get(Calendar.DATE);
}

public static int getFirstMonday(int year) {
    return getFirstMonday(year, Calendar.JANUARY);
}
Run Code Online (Sandbox Code Playgroud)

这是一个测试它的简单JUnit:http://pastebin.com/YpFUkjQG