使用1,2,3...代表星期,获取满足限定条件的下一个星期对应的日期
来源:互联网 发布:文泰2009端口设置 编辑:程序博客网 时间:2024/06/05 15:33
场景:
用户选择默认的星期作为收货星期,需要转化为日期。比如用户默认是星期三收货,今天是星期四,那么系统需要计算下个星期三的日期。
描述:
使用字符串 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,表示原先是星期日,再次赋值为7today=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 0
- 使用1,2,3...代表星期,获取满足限定条件的下一个星期对应的日期
- 获取日期对应的星期
- 获取输入日期的星期
- PHP 获取日期的星期
- 公历日期计算对应的星期
- oracle得到日期对应的星期
- Calendar使用--> 获取星期几、一周日期的函数
- 输入日期的上一个或下一个星期X
- 获取一个星期时间段的具体日期
- 获取日期所在星期的所有数据
- 获取日期时间星期的"JAVASCRIPT代码"
- Javascript获取日期和星期的代码
- javascript获取指定日期的星期问题
- 根据已知的日期获取星期
- ios 日期和星期的获取
- java获取当月天数,指定年月的天数,指定日期获取对应星期
- java获取当月天数,指定年月的天数,指定日期获取对应星期
- java获取当月天数,指定年月的天数,指定日期获取对应星期
- windows设置网卡成100M b/s
- Webpack安装、配置、按需加载
- Android各种学习资料(Rxjava、动画、UI效果、开源库、算法、面试)资源链接
- 针对使用SharedPreferences来保存数据令列表中checkbox所造成的混乱状态
- 转贴:UE4 代码总结
- 使用1,2,3...代表星期,获取满足限定条件的下一个星期对应的日期
- C#excel导入导出
- 莫队——Luogu3709 大爷的字符串题
- MySQL之——表数据文件损坏导致数据库无法启动
- leetcode[Container With Most Water]
- HDU
- PL/SQL Developer部分使用技巧
- kibana5.4 安装
- 模拟器运行正常,真机报错:clang: error: linker command failed with exit code 1 (use -v to see invocation)