我必须获取任何一年的最后一个星期四的日期,但我面临的问题是,month of dec'15
最后一个星期四是,31-dec-2015
但我得到24-dec-2015
以下代码:
Date getLastThursday(def month, def year ) { Calendar cal = Calendar.getInstance(); cal.set( year, month,1 ) cal.add( Calendar.DAY_OF_MONTH, -(cal.get(Calendar.DAY_OF_WEEK )%7+2) ); return cal.getTime(); }
并解释我这段代码如何内部工作?
cal.add(Calendar.DAY_OF_MONTH, -(cal.get(Calendar.DAY_OF_WEEK )%7+2))
如果使用Java 8+,则可以使用时态调整器(Java Time API的一部分):
int month = 12; int year = 2015; LocalDate lastThursday = LocalDate.of(year, month, 1).with(lastInMonth(THURSDAY)); System.out.println("lastThursday = " + lastThursday); //prints 2015-12-31
注意:需要静态导入
import static java.time.DayOfWeek.THURSDAY; import static java.time.temporal.TemporalAdjusters.lastInMonth;
如果你不能使用新的API,我怀疑问题是在模数运算中,这应该工作:
//month should be 0-based, i.e. use 11 for December static Date getLastThursday(int month, int year) { Calendar cal = Calendar.getInstance(); cal.set(year, month + 1, 1); cal.add(Calendar.DAY_OF_MONTH, -((cal.get(Calendar.DAY_OF_WEEK) + 2) % 7)); if (cal.get(Calendar.MONTH) != month) cal.add(Calendar.DAY_OF_MONTH, -7); return cal.getTime(); }
第二个if条件是确保我们已经退回一个月.