我希望得到特定月份/年的第一个星期一的日子.
是)我有的:
我基本上有两个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.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)
如果您需要添加时间信息,可以使用任何可用LocalDate的LocalDateTime转换方式
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
| 归档时间: |
|
| 查看次数: |
16950 次 |
| 最近记录: |