0

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

是否有任何可用的api,或者我是否需要根据当天编写一个详细的程序,等等?

谢谢!

4

3 回答 3

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。

于 2012-09-05T14:36:54.057 回答
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);
于 2012-09-05T15:27:26.330 回答
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
于 2014-06-29T20:16:35.043 回答