我在java 8中轻松地做到了这一点:
public static Date getFourthTuesdayOfMay(int year){
LocalDate date = LocalDate.of(year, Month.MAY, 1);
LocalDate fourthTuesdayOfMay = date.with(dayOfWeekInMonth(4, DayOfWeek.TUESDAY));
return Date.from(fourthTuesdayOfMay.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
}
问题是我需要用java 7 .但不知道是怎么回事。
答案是:
Calendar date = Calendar.getInstance ();
date.set(Calendar.DAY_OF_WEEK,Calendar.TUESDAY);
date.set(Calendar.MONTH, Calendar.MAY);
date.set(Calendar.WEEK_OF_MONTH, 4);
date.set(Calendar.YEAR, year);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
return date.getTime();
发布于 2017-06-12 22:18:15
在java 7中,需要使用Calendar作为纯Java解决方案。(Joda几乎是java 8。)
public static Date getFourthTuesdayOfMay(int year) {
Calendar calendar = Calendar.getInstance();
int monthDay = 1;
calendar.set(year, Calendar.MAY, monthDay);
while (calendar.get(Calendar.DAY_OF_WEEK) != Calendar.TUESDAY) {
++monthDay;
calendar.set(Calendar.DAY_OF_MONTH, monthDay);
}
// monthDay = 1, ..., 7
monthDay += 3 * 7; // At most 28 <= 31
calendar.set(Calendar.DAY_OF_MONTH, monthDay);
return calendar.getTime();
}
由于没有指定区域设置,所以可以获得非公历日历,因此可以将Locale.FRANCE添加到getInstance中。模块7可以防止一周一天的循环,但这不是那么可读的。
https://stackoverflow.com/questions/44509395
复制相似问题