使用1,2,3...代表星期,获取满足限定条件的下一个星期对应的日期

目录

 

场景:

描述:

算法思路:

使用 Calendar

第一步:

遍历数组-需要转化为整形

遍历结束

算法实现


场景:

用户选择默认的星期作为收货星期,需要转化为日期。比如用户默认是星期三收货,今天是星期四,那么系统需要计算下个星期三的日期。

描述:

使用字符串 1,2,3,4,5,6,7星期一到星期日,并且,字符串可能是 1,2,3或者1,4,7等来限定星期的取值范围,这样的好处是,便于计算星期之间的差值。

比如今天是2017年08月31日 星期四,字符串为1,2,5,那么日期限定为星期一,星期二,星期五。系统应提供星期五日期。

 

算法思路:

根据今天日期与限定日期的差值,计算今天之后的第几天满足条件,如果本周没有满足条件的星期,则取下一周第一个满足限定条件的星期,计算和今天的差值,然后计算日期

 

 

使用 Calendar

java.util.Calendar

获取星期,这里需要注意的是,获取的值为整数0-6,对应关系为 1-星期日,2-星期一,3-星期二...7-星期日

 

 

Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.get(Calendar.DAY_OF_WEEK);

 

 

 

但是我们的字符串使用的是1-星期一,2-星期二,3-星期三...7-星期日

所以先对Calendar获取的星期做一个转化,即

 

int today=cal.get(Calendar.DAY_OF_WEEK)-1;//全部减1,
		if(today==0){//如果结果为0,表示原先是星期日,再次赋值为7
			today=7;
		}

 

Calendar 可以计算制定日期,几天之后的日期,比如一天之后

 

cal.add(Calendar.DAY_OF_YEAR, 1); //下一天

 

 

 

 

 

 

第一步:

获取今天星期几,并转化为规则 1-星期一,2-星期二,3-星期三...7-星期日

today

然后是字符串转化为数组-split(",")

1,2,3 ,5-> {1,2,3,5} ,这里array[0]=1,依次类推

 

遍历数组-需要转化为整形

如果,today=遍历值,则今天满足条件,设置标志位表示在本周得到预期日期,break;否则继续遍历。

如果,today<遍历值,则被遍历值满足条件,返回 今天+(遍历值和今天的星期差值)对应的日期,设置标志位表示在本周得到预期日期,break;否则继续遍历。

 

遍历结束

根据标志位判断遍历中是否得到预期日期,如果是则开始日期格式转化

否则,取下周的第一个符合限定星期的日期返回

星期日-today+数组[0]对应的日期

 

算法实现

 

/**
	 * 返回最近的符合星期规则的日期
	 * @param distributionTime 入参为 1,2,3,4,7 表示 星期一,二,三依次类推
	 * //0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六,7-星期日
	 * 
	 * @param dateType 返回的日期字符串格式
	 * @return
	 */
	public static String getDefaultDistributionTime(String distributionTime,String dateType){
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.get(Calendar.DAY_OF_WEEK);
		
		//今天是
		int today=cal.get(Calendar.DAY_OF_WEEK)-1;
		if(today==0){
			today=7;
		}
		
		String[] array=distributionTime.split(",");
		
		boolean thisWeekFlag=false;
		for(int i=0;i<array.length;i++){
			//周日比较特殊-单独判断
			if(Integer.valueOf(array[i])==today){
				//System.out.println("就返回今天");
				thisWeekFlag=true;//就在本周
				break;
				
			}else if(Integer.valueOf(array[i])>today){
				//就返回这一天
				//System.out.println("就返回今天+"+(Integer.valueOf(array[i])-today)+" 天之后");
				cal.add(Calendar.DAY_OF_YEAR, (Integer.valueOf(array[i])-today)); //下一天
				thisWeekFlag=true;//就在本周
				break;
			}
		}
		//如果在循环遍历结束之后,依旧没有结果,则说明本周没有预期的结果,那就取下周的第一天
		if(!thisWeekFlag){
			//System.out.println("就返回今天+"+(7-today)+" 到周末了+"+array[0]+" 那天");
			cal.add(Calendar.DAY_OF_YEAR, 7-today+Integer.valueOf(array[0]));
		}
	
		return dateTimeToStr(new Date(cal.getTimeInMillis()),dateType);
		 
	}

 

 

 

 

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值