Java Q:在任何一天,我都想确定(比如说)上周五是哪一天。示例:如果我今天运行我的程序(即 2012 年 9 月 5 日,星期三),我应该得到“上周五是 12 年 8 月 31 日”的结果。如果我在 2012 年 9 月 8 日星期六运行它,结果应该是 12 年 9 月 7 日,依此类推(不过,日期格式在这里并不是严格的问题)
是否有任何可用的api,或者我是否需要根据当天编写一个详细的程序,等等?
谢谢!
这个怎么样:
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。
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);
我最近开发了专门为此用例设计的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