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

xiaoxiao2021-02-28  77

目录

 

场景:

描述:

算法思路:

使用 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); }

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-34160.html

最新回复(0)