Java 确定一周中某一天的日期

Java 确定一周中某一天的日期,java,date,dayofweek,Java,Date,Dayofweek,Java Q:在任何一天,我都想确定(比如)上周五的日期。 示例:如果我今天(即9月5日,星期三,12日)运行我的程序,我会得到“上周五是8月31日”的结果。如果我在9月12日星期六运行它,结果应该是9月12日第7天,依此类推(尽管在这里日期格式不是一个严格的问题) 是否有任何可用的api,或者我是否需要编写一个基于当前日期的长达数天的程序,等等 谢谢大家! 这个怎么样: Calendar cal = Calendar.getInstance(); int day = cal.get(Calen

Java Q:在任何一天,我都想确定(比如)上周五的日期。 示例:如果我今天(即9月5日,星期三,12日)运行我的程序,我会得到“上周五是8月31日”的结果。如果我在9月12日星期六运行它,结果应该是9月12日第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\u OF_WEEK值加1返回上一个星期五。例如,如果当前日期是星期一(值=2),我们减去(2+1),则返回到星期五的3天。如果我们在周二做同样的事情,我们会回到(3+1)天,也就是周五

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

如何:

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();
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);
我们总是可以通过减去当前日期的Calendar.DAY\u 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);
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
我最近开发了一个专门为这个用例设计的:

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

你熟悉JodaTime吗?可能是和和的复制品。你熟悉JodaTime吗?可能是和和的复制品。这与星期五有什么关系?太棒了,+1!只是一个小小的旁注:
cal.add()
返回
void
。该代码工作正常,只是在星期五,它不会显示上一个星期五的日期,而是显示当前日期。有什么解决办法吗?稍微调整一下,我就没事了:int day=cal.get(Calendar.day\u OF_WEEK);int dayDiff=(天+1)%7;如果(dayDiff==0)dayDiff=7;cal.add(日历日/月日-日差);这和星期五有什么关系?太棒了,+1!只是一个小小的旁注:
cal.add()
返回
void
。该代码工作正常,只是在星期五,它不会显示上一个星期五的日期,而是显示当前日期。有什么解决办法吗?稍微调整一下,我就没事了:int day=cal.get(Calendar.day\u OF_WEEK);int dayDiff=(天+1)%7;如果(dayDiff==0)dayDiff=7;cal.add(日历日/月日-日差);