当前位置:  开发笔记 > 编程语言 > 正文

如何在java中获得最后一个月的星期四

如何解决《如何在java中获得最后一个月的星期四》经验,为你挑选了1个好方法。

我必须获取任何一年的最后一个星期四的日期,但我面临的问题是,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))



1> assylias..:

如果使用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条件是确保我们已经退回一个月.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有