(java)预约日期+时间

感触:我以为我写不出来,感谢昨天那个自己,花了2个小时写的。
原创不易,请注明出处。

package com.sjq.core.util.date;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.ArrayUtils;
/**
 * 预约只能提前,不是当天预约
 * 心里话:
 * 无钱无房,拿什么去爱你的。
 * 如果有一天,你找到合适的人,那就嫁了吧,我也会在心中默默祝福你。
 * 作为爱你的那个人,我仍然希望你过的好
 *  -- 爱雯雯的那个人
 * 
 * 
 * @author tangchao
 * @version 1.1
 */
public class IntervalTimeUtil {

    public static final String currentDateStringKey = "currentDateString";
    public static final String validTimeListKey = "validTimeList";
    public static final String currentDayListKey = "currentDayListKey";

    public static final Integer RESERVE_TIME_MAX_COUNT = 3;




    //多少分钟一次  
    private static final int reserveIntervalMinutes = 30;//15分钟
    private static final String minuteSplitChar = "~";
    private static final String hourMinuteChar = ":";
    private static final String dateSplitChar = "-";

    //最大为当前时间的,第2天才能预约
    private static final int afterMinDayNum = 2;//从当前天的  第2天开始预约
    private static final int afterMaxDayNum = 6;//从当天的  第6天结束预约
    //只能预约星期一到星期五
    private static int[] validWeekDays =  {
        1,2,3,4,5
    };
    //每天有效的时间段
    private static String[] validIntervalTimePeriods = {
        "09:00-12:20",
        "14:00-17:00"
    };
    //最大60分钟
    private static int maxMinuteNum = 60;
    private static int intTen = 10;

    private static Map<String, Object> resultMap = null;


    /**
     * 自动补0
     * @param i
     * @return
     */
    public static String autoHourFillZero(int i) {
        if(i < intTen) {
            return "0" + i;
        }
        return i + "";
    } 
    /**
     * 
     * @param i
     * @return
     */
    public static String autoMinuteFillZero(int i) {
        if(i < intTen) {//小于10分钟
            return "0" + i;
        }
        if(i > maxMinuteNum) {//60分钟
            return (i - maxMinuteNum) + "";
        }

        return i + "";
    } 

    public static List<String> getFutureAllValidMinutes() {
        List<String> validateTimeList = new ArrayList<String>();

        int intervalMinute = reserveIntervalMinutes;

        for (String item : validIntervalTimePeriods) {
            String[] s1 = item.split("-");//09:00,12:00

            String minHourMinute = s1[0];//09:00
            String[] ss1 = minHourMinute.split(":");
            int minHour = Integer.valueOf(ss1[0]);//09
            int startMinute = Integer.valueOf(ss1[1]);//00

            String maxHourMinute = s1[1];//12:00
            String[] ss2 = maxHourMinute.split(":");
            int maxHour = Integer.valueOf(ss2[0]);//12
            int endMinute = Integer.valueOf(ss2[1]);//00


            int lastHour = 0;
            int lastMinute = 0;
            StringBuffer sb = new StringBuffer();
            for (int i = minHour; i < maxHour; i++ ) {
                String itemString = "00";
                int startJ = intervalMinute;

                //第一次
                if(i == minHour) {//9 == 9
                    int itemInt = Integer.valueOf(itemString);//00
                    int startInt = Integer.valueOf(startMinute);//13
                    if(startInt > itemInt) {
                        itemString = ss1[1];//13
                    }

                    startJ = startInt + intervalMinute;
                } else {
                    if(lastMinute != (maxMinuteNum-reserveIntervalMinutes)) {
                        String beforehourString = autoHourFillZero(i-1);
                        String curhourString = autoHourFillZero(i);

                        int temp = maxMinuteNum - lastMinute;
                        temp = reserveIntervalMinutes - temp;
                        String curMinuteString = autoHourFillZero(temp);

                        itemString = autoMinuteFillZero(lastMinute);
                        sb.append(beforehourString + hourMinuteChar + lastMinute );//09:00
                        sb.append(minuteSplitChar);//~
                        sb.append(curhourString + hourMinuteChar + curMinuteString);//09:15

                        validateTimeList.add(sb.toString());
                        sb.delete(0, sb.length());//清除数据


                        itemString = curMinuteString;
                        startJ = temp + reserveIntervalMinutes;
                    } else {

                        String beforehourString = autoHourFillZero(i-1);
                        String curhourString = autoHourFillZero(i);

                        int temp = maxMinuteNum - lastMinute;
                        temp = reserveIntervalMinutes - temp;
                        String curMinuteString = autoHourFillZero(temp);

                        itemString = autoMinuteFillZero(lastMinute);
                        sb.append(beforehourString + hourMinuteChar + lastMinute );//09:00
                        sb.append(minuteSplitChar);//~
                        sb.append(curhourString + hourMinuteChar + curMinuteString);//09:15

                        validateTimeList.add(sb.toString());
                        sb.delete(0, sb.length());//清除数据


                        itemString = curMinuteString;
                        startJ = temp + reserveIntervalMinutes;

                    }
                }

                for (int j = startJ; j < maxMinuteNum; j += intervalMinute) {
                    String hourString = autoHourFillZero(i);//09
                    String curMinuteString = autoMinuteFillZero(j);

                    sb.append(hourString + hourMinuteChar + itemString );//09:00
                    sb.append(minuteSplitChar);//~
                    sb.append(hourString + hourMinuteChar + curMinuteString);//09:15


                    validateTimeList.add(sb.toString());
                    sb.delete(0, sb.length());//清除数据

                    itemString = autoMinuteFillZero(j);//15

                    lastMinute = j;//45  记录最后一个分钟数
                }


                lastHour = i;//11  记录最后一个小时数
            }


            //判断最后一个
            //11 < 12 && 60 - 45 >= 15
            //"09:00-12:20"
            int minutesCount = maxMinuteNum - lastMinute + endMinute;//60- 45 + 20 == 35
            if(lastHour < maxHour && minutesCount >= reserveIntervalMinutes) {//11:45~12:20
                int getInt = minutesCount/reserveIntervalMinutes;//2
                int eMinute = 0;
                String endMinuteString = "00";
                String startHour = autoHourFillZero(lastHour);//11:45~12:00
                String lastMinuteString = autoMinuteFillZero(lastMinute);
                String endHourString = autoHourFillZero(1+lastHour);

                //12:15~12:30

                for (int j = 0; j < getInt; j++) {

                    if(j == 0) {
                        if(lastMinute != (maxMinuteNum - reserveIntervalMinutes) ) {
                            int temp = maxMinuteNum - lastMinute;
                            temp = reserveIntervalMinutes - temp;

                            eMinute = temp;
                            endMinuteString = autoHourFillZero(temp);
                        }
                    }

                    sb.append(startHour + hourMinuteChar + lastMinuteString );//16:45
                    sb.append(minuteSplitChar);//~
                    sb.append(endHourString + hourMinuteChar + endMinuteString);//17:00

                    validateTimeList.add(sb.toString());
                    sb.delete(0, sb.length());//清除数据

                    startHour = endHourString;
                    lastMinuteString = endMinuteString;

                    eMinute += reserveIntervalMinutes;//17:15~17:45
                    endMinuteString = autoMinuteFillZero(eMinute);
                }


            }


        }

        return validateTimeList;
    }
    /**
     * 获取结果map
     * @return
     */
    public synchronized static Map<String, Object> getResultMap() {
        if(resultMap == null) {
            resultMap = new HashMap<String, Object>();
        }

        Calendar cal = Calendar.getInstance();
        String nowDate = getNowDate(cal);

        String currentDateString = (String) resultMap.get(currentDateStringKey);
        if(currentDateString == null || "".equals(currentDateString.trim() )) {
            return addNewMapData(nowDate);
        }

        if(nowDate.equals(currentDateString)) {
            return resultMap;
        }

        return addNewMapData(nowDate);
    }
    /**
     * 加载新的map数据
     * @param nowDate
     * @return
     */
    public static Map<String, Object> addNewMapData(String nowDate) {
        resultMap.put(currentDateStringKey, nowDate);

        List<String> dayList = getValidDays();
        resultMap.put(currentDayListKey, dayList);

        List<String> timeList = getFutureAllValidMinutes();

        List<String> validTimeList = getAllValidTime(timeList, dayList);
        resultMap.put(validTimeListKey, validTimeList);

        return resultMap;
    }

    public static void main(String[] args) {
        List<String> list = getFutureAllValidMinutes();
        for (String s : list) {
            System.out.println(s);
        }

        /*List<String> list = getValidDays();
        for (String s : list) {
            System.out.println(s);
        }*/
        /*List<String> timeList = getFutureAllValidMinutes();
        List<String> dayList = getValidDays();

        List<String> list = getAllValidTime(timeList, dayList);
        for (String s : list) {
            System.out.println(s);
        }*/
        /*Map<String, Object> rMap = getResultMap();

        List<String> list = (List<String>) rMap.get(validTimeListKey);
        for (String item : list) {
            System.out.println(item);
        }*/


    }
    /**
     * 获取日期
     * @param timeList
     * @param dayList
     * @return
     */
    public static List<String> getAllValidTime(List<String> timeList, List<String> dayList) {
        List<String> resultList = new ArrayList<String>();

        StringBuffer sb = new StringBuffer();
        for (String day : dayList) {
            String initDay = day + " ";

            for (String time : timeList) {
                sb.append(initDay);
                sb.append(time);

                resultList.add(sb.toString());

                sb.delete(0, sb.length());
            }

        }

        return resultList;
    }
    /**
     * 获取指定日期合法的预约时间
     * @param timeList
     * @param day
     * @return
     */
    public static List<String> getOneDayValidTime(String day) {
        List<String> timeList = getFutureAllValidMinutes();
        List<String> resultList = new ArrayList<String>();

        StringBuffer sb = new StringBuffer();
        String initDay = day + " ";

        for (String time : timeList) {
            sb.append(initDay);
            sb.append(time);

            resultList.add(sb.toString());

            sb.delete(0, sb.length());
        }


        return resultList;
    }
    /**
     * 获取合法的时间
     * @return
     */
    public static List<String> getValidDays() {
        List<String> validateDayList = new ArrayList<String>();
        for (int i = afterMinDayNum; i <= afterMaxDayNum; i++) {
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DAY_OF_MONTH, i);

            int weekDay = getChineseWeekDay(cal);

//          int hour = cal.get(Calendar.HOUR);
//          int minute = cal.get(Calendar.MINUTE);
//          int second = cal.get(Calendar.SECOND);


            if(ArrayUtils.contains(validWeekDays, weekDay) ) {//符合要求
                String date = getNowDate(cal);
                validateDayList.add(date);
            }
        }

        return validateDayList;
    }
    /**
     * 获取当前时间 yyyy-MM-dd 
     * @param cal
     * @return
     */
    public static String getNowDate(Calendar cal ) {
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);

        return year + dateSplitChar + month + dateSplitChar + day;
    }
    /**
     * 获取中文的星期几
     * @param cal
     * @return
     */
    public static int getChineseWeekDay(Calendar cal) {
        int weekDay = cal.get(Calendar.DAY_OF_WEEK);
        if(weekDay > 1) {
            return weekDay - 1;//星期一到星期六
        } else {
            return 7;//星期日
        }
    }


}
  • 7
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于java的实验室网上预约系统设计与实现 技术:后端:java,前端:html+js+css 框架:springBoot SSM 运行工具:idea 数据库:mysql 源码:详见文章最后 1、    登录页面: 2、首页 3、用户管理  4、添加用户  5、角色管理  6、添加角色  7、编辑角色 8、预约管理  9、新增预约  10、数据统计 数据库脚本如下: CREATE TABLE `sys_user_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `role_id` VARCHAR(500) NULL DEFAULT NULL COMMENT '角色ID', `user_id` VARCHAR(50) NOT NULL COMMENT '用户ID', `user_name` VARCHAR(100) NOT NULL COMMENT '用户名', `status` VARCHAR(50) NOT NULL COMMENT '是否有效0:false\\\\\\\\1:true', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL, `password` VARCHAR(128) NOT NULL, `tenantcode` VARCHAR(50) NOT NULL, `diskId` VARCHAR(500) NULL DEFAULT NULL, `remarks` VARCHAR(500) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='系统用户表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=52 ; CREATE TABLE `sys_role_t` ( `role_id` INT(11) NOT NULL COMMENT '角色ID', `role_name` VARCHAR(200) NOT NULL COMMENT '权限名称', `status` INT(11) NOT NULL COMMENT '是否有效0:true\\\\1:false', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL ) COMMENT='系统角色表' COLLATE='utf8_general_ci' ENGINE=InnoDB ; CREATE TABLE `sys_menu_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `parent_id` VARCHAR(50) NOT NULL COMMENT '父节点ID', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `menu_name` VARCHAR(200) NOT NULL COMMENT '菜单名称', `menu_url` VARCHAR(200) NULL DEFAULT NULL COMMENT '菜单URL', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='菜单表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=33 ; CREATE TABLE `client_manager_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `clientId` VARCHAR(50) NULL DEFAULT NULL COMMENT '客户编号', `clientName` VARCHAR(50) NULL DEFAULT NULL COMMENT '客户姓名', `address` VARCHAR(200) NULL DEFAULT NULL COMMENT '客户住址', `source` VARCHAR(200) NULL DEFAULT NULL COMMENT '客户所属公司', `sourceDate` VARCHAR(200) NULL DEFAULT NULL COMMENT '客户发展时间', `status` VARCHAR(200) NULL DEFAULT NULL COMMENT '客户级别', `clientNum` VARCHAR(200) NULL DEFAULT NULL COMMENT '拜访客户次数', `isTrue` VARCHAR(200) NULL DEFAULT NULL COMMENT '客户是否有效', PRIMARY KEY (`id`) ) COMMENT='客户人员信息表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=47 ;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值