题目:借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期
在这之前:需要说明的细节
1、对于Date d1=new Date(); 这个创建日期对象 d1是直接获得的本电脑现在的时间 做打印就可以看出来
2、要在规定的时间范围内1995.1.1 00:00:00 到 1995.12.31 23:59:59 怎样才能实现呢 单靠上述的创建对象很麻烦 要做减法
以下提供两种方法:
A、
Date start=new Date(95,0,1,0,0,0);
Date end=new Date(95,11,31,23,59,59);
这种是对其进行传参 因为Date这个类有这个方法
以下是Java源码:
public Date(int year, int month, int date, int hrs, int min, int sec) {
int y = year + 1900;
// month is 0-based. So we have to normalize month to support Long.MAX_VALUE.
if (month >= 12) {
y += month / 12;
month %= 12;
} else if (month < 0) {
y += CalendarUtils.floorDivide(month, 12);
month = CalendarUtils.mod(month, 12);
}
BaseCalendar cal = getCalendarSystem(y);
cdate = (BaseCalendar.Date) cal.newCalendarDate(TimeZone.getDefaultRef());
cdate.setNormalizedDate(y, month + 1, date).setTimeOfDay(hrs, min, sec, 0);
getTimeImpl();
cdate = null;
}
之前学习没学到这种方法 Date 功能还有很多 但是这个方法应该会被淘汰 (Deprecated)
B、利用字符串转换成日期
String startStr = "1995.1.1 00:00:00";
String endStr = "1995.12.31 23:59:59";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Date start = sdf.parse(startStr);
Date end = sdf.parse(endStr);
注意声明:import java.text.ParseException;
本题算法逻辑:
前面解决了如何 是现在在规定日期范围内进行运行
那么怎么做到随机呢——肯定的用到 Math.random() 之后乘以规定数据类型的数进行强转 这是一般思路 那里去找这个数 ——得靠Date这个类的方法getTime(); 它就可以获得从时间原点到规定时间一共经历多少 之后做加减法。
long random = (long) (Math.random()*(end.getTime()-start.getTime())+start.getTime());
System.out.println(new Date(random));
细节部分:
之后获得的长整型 random 只是数字 要转换为日期输出 还得调用 Date类里的方法——源码:
public Date(long date) {
fastTime = date;
}
也就是—— System.out.println(new Date(random));
在new Date();这个括号里内容写法格式不一样 调用不同的方法
最简便的写法:
long min = new Date(95, 1, 1, 0, 0, 0).getTime();
long max = new Date(95, 12, 31, 59, 59, 59).getTime();
long r = min + (long) (Math.random() * (max - min));
System.out.println(new Date(r));