人性化合理的时间选择逻辑

来源:互联网 发布: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
原创粉丝点击