Java问:在任何一天,我想确定上周五(比如)上周五的日期。 示例:如果我今天(即9月12日星期三)运行我的程序,我应该得到“上周五是8月31日”的结果。如果我在9月12日星期六运行它,结果应该是9月12日,依此类推(日期格式不是严格意义上的问题)
是否有可用的api,或者我是否需要根据当天等长时间写回程序?
谢谢!
答案 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