2个日期之间有几个自然周?相隔日期算出来除以7的不要答复了,高手来

tomaot123 2016-08-24 11:34:35
2016-8-14 到3016-8-22 有三周
2016-8-14 到3016-8-15 有一周
2016-8-8 到3016-8-21 也是一周
把相隔天数算出来除以7 ,这样的答案就不要回复了,不对的。。
...全文
495 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuyu_1234 2018-05-04
  • 打赏
  • 举报
回复
//不知道这样的思路可不可以,还请各位大神指教 String sjq = "2018-05-01"; String sjz = "2018-05-20"; Calendar calSjq = Calendar.getInstance(); Calendar calSjz = Calendar.getInstance(); calSjq.setFirstDayOfWeek(Calendar.MONDAY); calSjz.setFirstDayOfWeek(Calendar.MONDAY); SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd"); try { calSjz.setTime(simdf.parse(sjz)); calSjq.setTime(simdf.parse(sjq)); } catch (java.text.ParseException e1) { e1.printStackTrace(); } //一年有52周, int totalWeeks = 0; int sjzYear=calSjz.get(Calendar.YEAR);//时间止所在年限 int sjqYear=calSjq.get(Calendar.YEAR);//时间起所在年限 int sjzWeek=calSjz.get(Calendar.WEEK_OF_YEAR);//时间止所在周 int sjqWeek=calSjq.get(Calendar.WEEK_OF_YEAR);//时间起所在周 totalWeeks=(sjzYear-sjqYear)*52+sjzWeek-sjqWeek+1;
qq_32825349 2016-08-29
  • 打赏
  • 举报
回复

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
 * 我的思路:
 * 1.计算相隔天数
 * 2.加上第一个星期已经过去的天数
 * 3.加上最后一个星期剩余的天数
 * 4.除以7得出结果(经过2、3步骤,除以7都能得到整数)
 *
 */

public class GetWeek {
	public static void main(String[] args) throws ParseException {
		String staDate = "2016-8-24";
		String endDate = "2016-8-29";

		SimpleDateFormat myMat = new SimpleDateFormat("yy-MM-dd");
		//算出相隔天数
		int dayNum =  (int) ((myMat.parse(endDate).getTime() - 
				myMat.parse(staDate).getTime())/(1000*60*60*24));
		
		Calendar cal = Calendar.getInstance();  
		cal.setTime(myMat.parse(staDate));  
		int staWeek = cal.get(Calendar.DAY_OF_WEEK);//获取星期几,星期日为第一天值为1
		staWeek = yourWeek(staWeek);//把星期几换成你要的,星期一为第一天值为1
		System.out.println("staWeek:"+staWeek);
		dayNum = dayNum + (staWeek-1);//把第一个星期已经过去的天数加到总数中;(staWeek-1)当天算已经过去了
		
		cal.setTime(myMat.parse(endDate));  
		int endWeek = cal.get(Calendar.DAY_OF_WEEK);
		endWeek = yourWeek(endWeek);
		System.out.println("endWeek:"+endWeek);
		dayNum = dayNum + (7-(endWeek-1));//把最后一个星期剩余的天数加到总数;(staWeek-1)当天算刚开始
		
		System.out.println(dayNum/7.0);//除以7.0是为了验证会不会有小数
		
	}
	public static int yourWeek(int oldWeek){
		int newWeek = -1;
		newWeek = oldWeek - 1;
		if(newWeek == 0){
			newWeek = 7;
		}
		return newWeek;
		
	}

}

soton_dolphin 2016-08-24
  • 打赏
  • 举报
回复
你先要明确到底一周是从星期天开始,星期六结束还是星期一开始,星期天结束?
skgary 2016-08-24
  • 打赏
  • 举报
回复
然后自己再看一下, 开始日期是星期几,结束日志是星期几,做一个补偿算法就好了。 不用把问题想的太复杂。
kahnyy5202015 2016-08-24
  • 打赏
  • 举报
回复
比如说 某个重复的天数 星期1 星期2 星期3 。。。。。星期天 找出他们最大的重复数 应该就是有几个自然周
NewMoons 2016-08-24
  • 打赏
  • 举报
回复
貌似java api已经提供了现成的方法吧。自己百度吧。
soton_dolphin 2016-08-24
  • 打赏
  • 举报
回复
引用 4 楼 u011809117 的回复:
周一开始,周日结束
为什么8月8号到8月21号也是一周???
nikyotensai 2016-08-24
  • 打赏
  • 举报
回复
引用 4 楼 u011809117 的回复:
周一开始,周日结束
大概是这样
package MyTest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class c {
	static int xiqiji(Calendar c){
		int dayForWeek;
		if(c.get(Calendar.DAY_OF_WEEK) == 1){
			   dayForWeek = 7;
			  }else{
			   dayForWeek = c.get(Calendar.DAY_OF_WEEK) - 1;}
		return dayForWeek;
	}

	static Calendar From(Calendar c){
		switch(xiqiji(c)){
		case 1:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-0);
			break;
		case 2:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-1);
			break;
		case 3:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-2);
			break;
		case 4:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-3);
			break;
		case 5:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-4);
			break;
		case 6:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-5);
			break;
		case 7:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)-6);
		}
		return c;

	}

	static Calendar To(Calendar c){
		switch(xiqiji(c)){
		case 1:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+6);
			break;
		case 2:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+5);
			break;
		case 3:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+4);
			break;
		case 4:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+3);
			break;
		case 5:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+2);
			break;
		case 6:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+1);
			break;
		case 7:c.set(Calendar.DAY_OF_YEAR, c.get(Calendar.DAY_OF_YEAR)+0);
		}
		return c;

	}


	public static void main(String[] args) throws ParseException {
		Calendar c1 = Calendar.getInstance();
		Calendar c2 = Calendar.getInstance();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

		c1.setTime(sdf.parse("2016-08-14"));
		c2.setTime(sdf.parse("2016-08-22"));

		long cc1=From(c1).getTimeInMillis()/(1000*3600*24);
		long cc2=To(c2).getTimeInMillis()/(1000*3600*24);
		System.out.println((cc2-cc1+1)/7);


	}
}
tomaot123 2016-08-24
  • 打赏
  • 举报
回复
周一开始,周日结束

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧