Java - 在指定日期、时间段内生成随机时间

需求:在开始日期与结束日期之间,每天在上午区间和下午区间内,各随机生成一条时间(时间间隔为10分钟)。
★参数
1.开始日期:startDate
2.结束日期:endDate
3.上午区间:
		(1)上午开始时间:amStartTime
		(2)上午结束时间:amEndTime
4.下午区间:
		(1)下午开始时间:pmStartTime
		(2)下午结束时间:pmEndTime
5.间隔时间:randomTime

1.获得指定日期范围内的每一天

    /**
     * 日期范围内生成随机时间(上午下午指定时间内各一条)
     */
    List<Date> getRandomDateList(Date beginDate, Date endDate) throws ParseException {
    
        List<Date> resList = new ArrayList<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date tmp = beginDate;

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginDate);	// 获得开始日期

        // 上午 11:00:00 ~ 12:30:00
        String amStart = " 11:00:00";
        String amEnd = " 12:30:00";

        // 下午 18:30:00 ~ 22:00:00
        String pmStart = " 18:30:00";
        String pmEnd = " 22:00:00";

        // 获得开始日期到结束日期的日期
        while (tmp.getTime() < endDate.getTime()) {

            tmp = calendar.getTime();
            String format = sdf.format(tmp);
            calendar.add(Calendar.DAY_OF_MONTH, 1);		// 天数+1

            // 拼装生成上午的时间 YYYY-MM-dd HH:mm:ss
            String amStartFormat = format + amStart;    // 上午开始时间
            Date amStartDate = sdf2.parse(amStartFormat);
            String amEndFormat = format + amEnd;    // 上午结束时间
            Date amEndDate = sdf2.parse(amEndFormat);

			// 上午开始~结束时间中,以10分钟为间隔,随机获取一条时间
            Date amRandomDate = getRandomDate(amStartDate, amEndDate);
			// 添加到返回数组中
            resList.add(amRandomDate);

            // 生成下午的时间 YYYY-MM-dd HH:mm:ss
            String pmStartFormat = format + pmStart;    // 上午开始时间
            Date pmStartDate = sdf2.parse(pmStartFormat);
            String pmEndFormat = format + pmEnd;    // 上午结束时间
            Date pmEndDate = sdf2.parse(pmEndFormat);

			// 下午开始~结束时间中,以10分钟为间隔,随机获取一条时间
            Date pmRandomDate = getRandomDate(pmStartDate, pmEndDate);
			// 添加到返回数组中
            resList.add(pmRandomDate);
        }
        return resList;
    }

2.根据所传日期,在指定时间范围内,获得随机时间(10分钟间隔)

	/**
     * 获得时间范围内,随机时分秒(以10分钟为单位)
     * @param beginTime
     * @param endTime
     * @return
     */
    public Date getRandomDate(Date beginTime, Date endTime) {

		Integer randomTime = 10;

        List<Date> randomList = new ArrayList<>();
        SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(beginTime);     //获得当前日期 YYYY-MM-dd HH:mm:ss

        Date tmp2 = beginTime;
        while (tmp2.getTime() < endTime.getTime()) {
            tmp2 = calendar.getTime();
//            String format = sdf.format(tmp2);
//            System.out.println(format);
            // 分钟 + 10
            calendar.add(Calendar.MINUTE, randomTime);
            randomList.add(tmp2);
        }

        // 随机取集合中一位返回
        Random random = new Random();
        int index = random.nextInt(randomList.size());
        return randomList.get(index);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值