人性化合理的时间选择逻辑
来源:互联网 发布:java实现ftp客户端 编辑:程序博客网 时间:2024/05/22 10:22
最近做一个项目,有一个时间选择控件,里面的时间需要合理化设置。
比如,最多支持 今天,明天。
上班的合理时间为 0 - 11点
下班的合理时间为12 - 23 点
根据系统所处时间 AM 或者 PM ,判断 上班的话只好约到明天,因为处于PM没有办法再约上班的了。
另外顾客下单的时间应该比系统时间多出半个小时的缓冲时间。分钟只能选 00,10,20,30,40,50 这些段。
估计大家看到还是不明白,因为的确业务逻辑有点复杂的。可以参考 人人拼车 ,天天用车应用约车时的时间选择控件
逻辑代码如下,其实主要是自己做个记录:
/** * 计算 * 假设 1. 系统时间精确 * 2. 最小预约时间为标准时间+缓冲时间 * @author lq * */public class Duty {public static int INT_DUTY = 1 ;public static int BUFFER_TIME = 30 ;public static String STR_AM = "AM";public static String STR_PM = "PM";public static String STR_TODAY = "今天";public static String STR_TOMORROW = "明天";public static int INT_DUTTY_LIMIT_NOON = 12;public static int INT_DUTTY_LIMIT_DAWN = 24;public static void main(String[] args) {//测试String[] legalDay = dutyLegalDay(INT_DUTY);if(INT_DUTY==0){System.out.println("预约上班");}else{System.out.println("预约下班");}for (int i = 0; i < legalDay.length; i++) {System.out.println("legal day : "+legalDay[i]);String[] dutyLegalHour = dutyLegalHour(INT_DUTY,legalDay[i]);for (int j = 0; j < dutyLegalHour.length; j++) {System.out.println("legal Hour : "+dutyLegalHour[j]);String[] dutyLegalMinute = dutyLegalMinute(INT_DUTY, legalDay[i], dutyLegalHour[j]);for (int k = 0; k < dutyLegalMinute.length; k++) {System.out.println("legal Minute : "+dutyLegalMinute[k]);}}}}/** * 计算天 * @param interval * @param curTime * @param minTime * @param duty 0 代表上班 1代表下班 */public static String[] dutyLegalDay(int duty){LinkedList<String> listDay = new LinkedList<String>();String[] arrayLegalDay = null ;int[] array = getMinHourMinute();if(duty==0){ //上班if(STR_AM.endsWith(JudgeAMPM()) && array[0] < INT_DUTTY_LIMIT_NOON) // 预约上班合理性 1. 现在时间是上午 2. 合理最小时间 应该为小时小于12 ,若是PM 则仅可以预约明天的{listDay.add(STR_TODAY+getWeek(getTodayDate()));}}else{//下班if(array[0] < INT_DUTTY_LIMIT_DAWN) // 合理最小时间 应该为小时小于23,时间区间是 12 - 23 ,若是PM 则仅可以预约明天的{listDay.add(STR_TODAY+getWeek(getTodayDate()));}}listDay.add(STR_TOMORROW+getWeek(getTomorrowDate()));arrayLegalDay = new String[listDay.size()] ;listDay.toArray(arrayLegalDay);//for (int i = 0; i < arrayLegalDay.length; i++) {//System.out.println("legal Day : "+listDay.get(i));//}return arrayLegalDay ;}/** * 计算上班合法小时 * */public static String[] dutyLegalHour(int duty,String day){LinkedList<String> listHour = new LinkedList<String>();String[] arrayLegalHour = null ;int[] array = getMinHourMinute();if(duty==0){ //上班//传递过来 今天 or 明天if(day.contains(STR_TODAY) && array[0] < INT_DUTTY_LIMIT_NOON){//时间区间是 0 -11//合法的}else{//明天的,或者超过12的,都归为明天,array[0] = 0 ;}for (int i = array[0]; i <= 11; i++) {listHour.add(i+"");}}else{ //下班//传递过来 今天 or 明天if(day.contains(STR_TODAY) && array[0] < INT_DUTTY_LIMIT_DAWN){//时间区间是 12 -23if(array[0] < INT_DUTTY_LIMIT_NOON){ array[0] = INT_DUTTY_LIMIT_NOON ;}}else{//明天的,或者超过23的,都归为明天,array[0] = INT_DUTTY_LIMIT_NOON ;}for (int i = array[0]; i <= 23; i++) {listHour.add(i+"");}}arrayLegalHour = new String[listHour.size()] ;listHour.toArray(arrayLegalHour);//for (int i = 0; i < listHour.size(); i++) {//System.out.println("legal Hour : "+listHour.get(i));//}return arrayLegalHour ;}/** * 计算合法的分 * @param minute * @return */ public static String[] dutyLegalMinute(int duty ,String day,String hour){ LinkedList<String> listMinute= new LinkedList<String>(); String[] arrayLegalMinute =null; int[] array = getMinHourMinute();if(duty==0){if(day.contains(STR_TODAY)){if(Integer.parseInt(hour) > array[0]){array[1] = 0 ;}}else{array[1] = 0 ;}for (int i = array[1]; i <= 5; i++) {listMinute.add(i+"0");}}else{if(day.contains(STR_TODAY)){if(Integer.parseInt(hour) > array[0]){array[1] = 0 ;}}else{array[1] = 0 ;}for (int i = array[1]; i <= 5; i++) {listMinute.add(i+"0");}}arrayLegalMinute = new String[listMinute.size()] ;listMinute.toArray(arrayLegalMinute); //for (int i = 0; i < listMinute.size(); i++) {//System.out.println("legal Minute : "+listMinute.get(i));//} return arrayLegalMinute; } /** * 通用方法,得到最小小时 和分钟 * 计算合理的天、时、分 都需要用 * 返回结果 array[0] 最小时 * array[1] 最小十分位 */public static int[] getMinHourMinute(){int[] array = new int[2] ;Date minTime = getLegalTime(BUFFER_TIME);//最大值为 yyyy-MM-dd 11:20 因为 11:20 + buffer_time = 11: 50int minHour = minTime.getHours();int minMinute = minTime.getMinutes();String strMinute = "";if(minMinute<10){strMinute = "0"+minMinute;}else{strMinute = ""+minMinute;}int[] arraytemp = splitDoubleDigit(strMinute);//array[0] 十位 array[1]个位if(arraytemp[1]>0){////只要个位大于0 ,都要十位进位,例如 52 要进成 60 , 31进位成 40arraytemp[0] = arraytemp[0] + 1; if(arraytemp[0] == 6){//是6,则小时+1 , 分钟的个位,十位归为0 minHour = minHour + 1 ; arraytemp[0] = 0 ; arraytemp[1] = 0 ; }}array[0] = minHour ;array[1] = arraytemp[0];return array ;}/** * 获得合法时间 * @param minute * @return */public static Date getLegalTime(int minute){ Date date = new Date(); Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MINUTE, minute); Date time = c.getTime(); return time; }/** * 判断当前是上午还是下午 * * @return */public static String JudgeAMPM(){String ret = null ;GregorianCalendar calendar = new GregorianCalendar(); int val = calendar.get(GregorianCalendar.AM_PM) ;if(0==val){ret = STR_AM ;}else{ret = STR_PM ;}return ret ;} /** * 拆分两位数 例如 54 拆分为 5 , 4 * @param num * @return */ public static int[] splitDoubleDigit(String num){int[] resArray = new int[(num).length()];int number = Integer.parseInt(num);for(int i = resArray.length-1;i>=0;i--){resArray[i] = number%10;number /= 10;}/*for(int i:resArray){System.out.println(i);}*/return resArray; } //根据日期取得星期几 public static String getWeek(String date){ Date temp = getDateByStr2(date); SimpleDateFormat sdf = new SimpleDateFormat("EEEE"); String week = sdf.format(temp); return week; } /** * yyyy-MM-dd 转换成date数据 * @param dd * @return */public static Date getDateByStr2(String dd) { SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd"); Date date; try { date = sd.parse(dd); } catch (ParseException e) { date = null; e.printStackTrace(); } return date; } /** * 获取今天日期 * @return */ public static String getTodayDate(){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式 return df.format(new Date()); } /** * 获取明天日期 * 可以扩展 * @return */ public static String getTomorrowDate(){ Date date=new Date();//取时间 Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动 date=calendar.getTime(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateString = formatter.format(date); return dateString; } }
现在系统时间为 2015-1-23 15:12 ,分别选择上班和下班。看展示结果。
上班:
预约上班legal day : 明天星期六legal Hour : 0legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 1legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 2legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 3legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 4legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 5legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 6legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 7legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 8legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 9legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 10legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 11legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50
预约下班:
预约下班legal day : 今天星期五legal Hour : 15legal Minute : 50legal Hour : 16legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 17legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 18legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 19legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 20legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 21legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 22legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 23legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal day : 明天星期六legal Hour : 12legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 13legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 14legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 15legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 16legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 17legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 18legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 19legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 20legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 21legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 22legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50legal Hour : 23legal Minute : 00legal Minute : 10legal Minute : 20legal Minute : 30legal Minute : 40legal Minute : 50
0 0
- 人性化合理的时间选择逻辑
- php 人性化的时间显示
- 切削用量的合理选择
- IOS里人性化的时间显示
- 比较器的合理选择
- 如何选择合理的域名
- 复杂业务逻辑下的合理遍历
- 如何合理的安排时间
- android下检查网络不通的后续合理人性化操作(常用)
- IOS 人性化时间显示
- 第一条:合理的选择容器
- 如何选择合理的抄水表方案
- 程序员的科学合理的作息时间
- 如何合理管理您的时间呢?
- 不要错过项目汇报的合理时间
- 合理的利用时间就等于高效
- 课表是合理的浪费时间
- 你的项目时间管理合理吗?
- Android自定义键盘,键盘文字模糊问题
- Android官方入门文档[5]建立操作栏
- 3.Spring属性配置细节
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- java--常用类Date
- 人性化合理的时间选择逻辑
- SNMP协议
- POJ 1731 Orders(带重复字母的全排列 + 暴力)
- Fragment Transaction
- LeetCode6——ZigZag Conversion
- 使用Jsoup 异步抓取页面的数据
- Linux CentOS 启动mysql提示错误:Table 'mysql.plugin' doesn't exist
- 020 二维数组
- 前人栽树,后人乘凉。理解Service后台进行百度定位。