对于业务中的一些生效时间处理理解

在业务中常会遇到对于一些事件、规则等等有设置生效时间,它们无非也就两种大类型

  • 时间是具体的时间,比如(2024-06-28 10:00:00到 2024-06-29 20:00:00)

这种类型可以采取的方式有很多,比如可以直接转换为时间戳比较

方法:

  1. 前端传值类型 yyyy-mm-dd 和 hh:mm:ss

  2. 数据库类型选用Date

  3. 类型转换

        /**
         * 将日期字符串转换成日期对象
         * @param yyyyMMdd 格式是yyyy-mm-dd的字符串
         * @param hhmmss 格式是hh:mm:ss的字符串
         * @return
         */
        public static Date converToDate(String yyyyMMdd, String hhmmss){
            String[] days = yyyyMMdd.split("-");
            String[] time = hhmmss.split(":");
            LocalDateTime localDateTime = LocalDateTime.of(Integer.parseInt(days[0]), Integer.valueOf(days[1]), Integer.parseInt(days[2]),
                    Integer.parseInt(time[0]), Integer.parseInt(time[1]), Integer.parseInt(time[2]));
            Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
            return date;
        }
    
    
  4. 生效时间判断,判断当前时间是否在时效内

    直接转换为时间戳进行判断即可

  • 时间是一天中的某个时刻,比如 周一至周五的09:00 到 17:00

这种类型处理起来相对比较复杂,需要对周几和时间段单独判断

  1. 前端传值类型为(1,2,3)表示周一周二周三 和 hh:mm

  2. 数据库用两个字符类型存储

  3. 判断是否处于周内时间段

    
        /**
         * 判断当前日期是否在指定的日期范围内
         * @param days 以逗号分隔,(1,2,3,4,5) = 周一至周五
         * @return
         */
        public static boolean judgeDay(String days){
            // 获取当前日期
            LocalDate today = LocalDate.now();
            // 获取当前星期几
            DayOfWeek dayOfWeek = today.getDayOfWeek();
            int value = dayOfWeek.getValue();
    
            return days.contains(String.valueOf(value));
    
        }
    
  4. 判断当前时间是否处于合法时间段内

        /**
         * 判断当前时间是否处于开始时间和结束时间之间
         * 1.获取开始时间S、结束时间E、当前时间N
         * 2.如果S<E,直接判断
         * 3.如果S>E,则E=E+24,如果N<S,则N+=24
         * 4.继续判断
         * @param startTime hh:ss
         * @param endTime hh:ss
         * @return
         */
        public static boolean validateTime(String startTime,String endTime){
            Date date = new Date();
            int hours = date.getHours();
            int minutes = date.getMinutes();
            int nowTime = hours * 100 + minutes;
    
            int sTime = converTime(startTime);
            int eTime = converTime(endTime);
            if(sTime <= eTime){
                return sTime <= nowTime && nowTime <= eTime;
            }else{
                eTime += 2400;
                if(nowTime < sTime){
                    nowTime += 2400;
                }
                return sTime <= nowTime && nowTime <= eTime;
            }
        }
    
    
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值