例:编程实现生成随机日期,范围在: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()));
}