编程实现:在指定范围内的生成随机日期。

162 阅读1分钟

例:编程实现生成随机日期,范围在:2022-1-1 0:0:0 -到现在的时间之内

解决思路:

1,获取设定的起始时间,将起始时间转化为毫秒值

2,获取设定的结束时间,将结束时间转化为毫秒值

3,创建一个随机数,且随机范围在起始时间和结束时间之间。

4,将随机数转化为标准日期格式的日期时间

代码如下: ​

package number01;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Auther赵 :桀桀桀
 * @ClassName:Domo01
 * @Dzte :2022/7/13 10:23
 * @Version :1.0
 **/
public class Domo01 {
    public static void main(String[] args) throws ParseException {
    
        domo02();
      
    }

  
    }

    //8、编程实现随机日期范围在:2022-1-1 0:0:0 - 现在日期

    public static void domo02() throws ParseException {
        //获取现在日期的毫秒值
        Date as = new Date();
        long s = as.getTime();

        //先将时间存入字符串
        String aa = "2022-01-01 00:00:00";
        //设定日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //将字符串格式转化为日期格式
        Date dt = sdf.parse(aa);
        //日期转化为毫秒值
        long ad = dt.getTime();
        //创建随机数并设定范围
        Random a = new Random();
        //由于long类型随机无法设定范围,所以只能转换数据类型
        //方法一:转换float类型
        long cc=(long) a.nextFloat(ad,s);
        //输出方式一
        //System.out.printf("%tF %<tT",cc);
        //输出方式二
        System.out.println(sdf.format(cc));

        //方法二:转换Double类型
        long tt = ad-s;
        long nnn = s + (long)(a.nextDouble()*tt);
        //System.out.printf("%tF %<tT",nnn);
        System.out.println(sdf.format(nnn));

        //方法三,封装一个工具了,可以随时调用
        float randomDate = randomlong1(ad,s);
        System.out.println(sdf.format(randomDate));


    }
       //封装的一个工具了(返回float类型),可以随时调用
    public static float  randomlong1(float start,float  end){
        Random a = new Random();
         float  aa=end-start;
        return (float)(start+(aa*a.nextFloat()));
    }
      //封装的一个工具了(返回double类型),可以随时调用
    public static double  randomlong2(double start,double  end){
        Random a = new Random();
       double  aa=end-start;
        return (double) (start+(aa*a.nextFloat()));
    }