确定特定星期几的日期

时间:2012-09-05 14:30:27

标签: java date dayofweek

Java问:在任何一天,我想确定上周五(比如)上周五的日期。 示例:如果我今天(即9月12日星期三)运行我的程序,我应该得到“上周五是8月31日”的结果。如果我在9月12日星期六运行它,结果应该是9月12日,依此类推(日期格式不是严格意义上的问题)

是否有可用的api,或者我是否需要根据当天等长时间写回程序?

谢谢!

3 个答案:

答案 0 :(得分:3)

这个怎么样:

Calendar cal = Calendar.getInstance();
int day = cal.get(Calendar.DAY_OF_WEEK);
cal.add(Calendar.DAY_OF_MONTH, -((day + 1) % 7));
Date lastFriday = cal.getTime();

我们总是可以通过减去当前日期的Calendar.DAY_OF_WEEK值加上1来回到上周五。例如,如果当前日期是星期一(值= 2),我们减去(2 + 1)我们回到3点到星期五。如果我们在星期二做同样的事情,我们会回去(3 + 1)天 - 也到星期五。

如果当天是星期五或星期六,我们需要确保我们只分别返回0或1天,所以我们只取(day + 1)值的mod 7。

答案 1 :(得分:0)

int day = cal.get(Calendar.DAY_OF_WEEK);  
int dayDiff = (day+1)%7;  
if(dayDiff == 0)  
  dayDiff = 7;  
cal.add(Calendar.DAY_OF_MONTH, - dayDiff);

答案 2 :(得分:0)

我最近开发了Lamma Date,专为此用例而设计:

new Date(2014, 7, 1).previous(DayOfWeek.FRIDAY); // 2014-06-27
new Date(2014, 7, 2).previous(DayOfWeek.FRIDAY); // 2014-06-27
new Date(2014, 7, 3).previous(DayOfWeek.FRIDAY); // 2014-06-27
new Date(2014, 7, 4).previous(DayOfWeek.FRIDAY); // 2014-06-27
new Date(2014, 7, 5).previous(DayOfWeek.FRIDAY); // 2014-07-04
new Date(2014, 7, 6).previous(DayOfWeek.FRIDAY); // 2014-07-04
new Date(2014, 7, 7).previous(DayOfWeek.FRIDAY); // 2014-07-04