输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31 输入时间范围:1900-01-01 00:00:00,205

输入时间,找出3小时后的工作时间点,如果遇到休息时间,需要跳过(就是休息时间不计时),输入时间格式:2020-03-21 14:23:31
输入时间范围:1900-01-01 00:00:00,2050-01-01 00:00:00
工作时间:周一至周五,上午8:00至12:00,下午2:00,至18:00

!!!!请注意题目各种情况 !!!!

测试用例如:
输入2020-03-20 14:23:31(星期五), 返回 2020-03-20 17:23:31
输入2020-03-20 05:23:31(星期五), 返回 2020-03-20 11:00:00

  • 分析
    周一到周五下午15点前都可看做同种
    时间段:0-8(直接到11点) 8-9(小时上加3小时)9(9点特别注意) 9-12(小时上加5小时)12-14(直接到17点整) 14-15(小时上加3小时)15(15点特别注意) 15-18(小时上-7 天数+1) 18-23(天数+1 直接到11点整)
    周五下午15:00:00-18:00:00(天+3 小时-7) 18后(天数+3 直接到11点整)
    周六 周天 在天数上加到星期一

下面是代码

public class TestDome {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("E");
        System.out.println("请输入时间:yyyy-MM-dd HH:mm:ss");
        String minDate="1900-01-01 00:00:00";
        String maxDate="2050-01-01 00:00:00";
        Scanner scanner=new Scanner(System.in);
        String date=scanner.nextLine();
        long min=sdf.parse(minDate).getTime();
        long max=sdf.parse(maxDate).getTime();
        long dateTime=sdf.parse(date).getTime();
        Date date1=new Date(dateTime);
        System.out.print(sdf.format(date1)+"("+simpleDateFormat.format(date1)+")");
        if (dateTime<min||dateTime>max){
            System.out.println("不再范围");
        }else{
            Date time=new Date(dateTime);
            Calendar calendar=Calendar.getInstance();
            calendar.setTime(time);
            int weekday=calendar.get(Calendar.DAY_OF_WEEK)-1;
            int hours=calendar.get(Calendar.HOUR_OF_DAY);
            if (weekday==6){
                dateTime=dateTime+2*24*60*60*1000;
                time.setTime(dateTime);
                calendar.setTime(time);
                calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),11,0,0);
            }else if (weekday==0){
                dateTime=dateTime+24*60*60*1000;
                time.setTime(dateTime);
                calendar.setTime(time);
                calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),11,0,0);
            }else {
                if (weekday==5&&hours>=18){
                        dateTime=dateTime+3*24*60*60*1000;
                        time.setTime(dateTime);
                        calendar.setTime(time);
                        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),11,0,0);
                }else if (weekday==5&&(hours>15&&hours<18||hours==15&&calendar.get(Calendar.MINUTE)>0||hours==15&&calendar.get(Calendar.SECOND)>0)){
                    dateTime=dateTime+3*24*60*60*1000;
                    time.setTime(dateTime);
                    calendar.setTime(time);
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),hours-7,calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND));
                }else if (hours<8){
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),11,0,0);
                } else if (hours>=8&&hours<9||hours==9&&calendar.get(Calendar.MINUTE)==0&&calendar.get(Calendar.SECOND)==0) {
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),hours+3,calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND));
                }else if (hours>9&&hours<12||hours==9&&calendar.get(Calendar.MINUTE)>0||hours==9&&calendar.get(Calendar.SECOND)>0) {
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),hours+5,calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND));
                }else if (hours>=12&&hours<14){
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),17,0,0);
                }else if (hours>=14&&hours<15||hours==15&&calendar.get(Calendar.MINUTE)==0&&calendar.get(Calendar.SECOND)==0) {
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),hours+3,calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND));
                }else if (hours>15&&hours<18||hours==15&&calendar.get(Calendar.MINUTE)>0||hours==15&&calendar.get(Calendar.SECOND)>0) {
                    dateTime=dateTime+24*60*60*1000;
                    time.setTime(dateTime);
                    calendar.setTime(time);
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),hours-7,calendar.get(Calendar.MINUTE),calendar.get(Calendar.SECOND));
                }else if (hours>=18){
                    dateTime=dateTime+24*60*60*1000;
                    time.setTime(dateTime);
                    calendar.setTime(time);
                    calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DATE),11,0,0);
                }
            }
            System.out.println("三小时后工作时间为:"+sdf.format(calendar.getTime()));
        }

    }
}

测试结果
1899-01-01 00:12:23(星期日)不再范围
2051-01-01 00:00:00(星期日)不再范围
2020-11-30 07:00:00(星期一)三小时后工作时间为:2020-11-30 11:00:00
2020-11-30 08:00:00(星期一)三小时后工作时间为:2020-11-30 11:00:00
2020-11-30 08:01:01(星期一)三小时后工作时间为:2020-11-30 11:01:01
2020-11-30 09:00:00(星期一)三小时后工作时间为:2020-11-30 12:00:00
2020-11-30 09:00:01(星期一)三小时后工作时间为:2020-11-30 14:00:01
2020-11-30 09:01:00(星期一)三小时后工作时间为:2020-11-30 14:01:00
2020-11-30 09:01:01(星期一)三小时后工作时间为:2020-11-30 14:01:01
2020-11-30 12:00:00(星期一)三小时后工作时间为:2020-11-30 17:00:00
2020-11-30 12:00:01(星期一)三小时后工作时间为:2020-11-30 17:00:00
2020-11-30 12:01:01(星期一)三小时后工作时间为:2020-11-30 17:00:00
2020-11-30 14:00:00(星期一)三小时后工作时间为:2020-11-30 17:00:00
2020-11-30 14:01:01(星期一)三小时后工作时间为:2020-11-30 17:01:01
2020-11-30 15:00:00(星期一)三小时后工作时间为:2020-11-30 18:00:00
2020-11-30 15:00:01(星期一)三小时后工作时间为:2020-12-01 08:00:01
2020-11-30 15:01:00(星期一)三小时后工作时间为:2020-12-01 08:01:00
2020-11-30 17:58:57(星期一)三小时后工作时间为:2020-12-01 10:58:57
2020-11-30 18:00:00(星期一)三小时后工作时间为:2020-12-01 11:00:00
2020-11-30 18:00:01(星期一)三小时后工作时间为:2020-12-01 11:00:00
根据代码周一到周五15:00:00之前与周一测试用例同上
2020-12-04 14:00:00(星期五)三小时后工作时间为:2020-12-04 17:00:00
2020-12-04 15:00:00(星期五)三小时后工作时间为:2020-12-04 18:00:00
2020-12-04 15:00:01(星期五)三小时后工作时间为:2020-12-07 08:00:01
2020-12-04 15:01:00(星期五)三小时后工作时间为:2020-12-07 08:01:00
2020-12-04 18:00:01(星期五)三小时后工作时间为:2020-12-07 11:00:00
2020-12-05 05:23:23(星期六)三小时后工作时间为:2020-12-07 11:00:00
2020-12-05 12:23:23(星期六)三小时后工作时间为:2020-12-07 11:00:00
2020-12-05 18:23:23(星期六)三小时后工作时间为:2020-12-07 11:00:00
2020-12-06 05:23:23(星期日)三小时后工作时间为:2020-12-07 11:00:00
2020-12-06 10:23:23(星期日)三小时后工作时间为:2020-12-07 11:00:00
2020-12-06 19:23:23(星期日)三小时后工作时间为:2020-12-07 11:00:00

java.text.ParseException: Unparseable date: “2020-12- 0:0:0”
java.text.ParseException: Unparseable date: “2020-10-10 0:0”

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值