有这样一个需求:构造一个方法,随机生成1990-12-31 0 00到1990-12-31就是之间任意一个时间点。
思路是这样:在javaAPI中日期类型和长类型很好转化,所以我们可以把问题转化为,求两个长类型数之间的任意值。
同时需要了java API中解的:Math.round(双),math . random (),,新日期(年、月、日);日历。
math . random()会随机生成大于等于0小于1的随机的两类型。
数学。轮(double)需要传入一个双类型,返回最接近这个双类型的长类型。
日历是处理时间的工具类,如日期一样的日历月份也是从0开始计算
具体代码如下
公共静态字符串randomDateBetweenMinAndMax () { 日历日历=Calendar.getInstance ();//注意月份要减去1 calendar.set (1990、11、31); .getTime calendar.getTime () ();//根据需求,这里要将时分秒设置为0 calendar.set(日历。HOUR_OF_DAY, 0); calendar.set(日历。分钟,0); calendar.set (Calendar.SECOND 0); 长min=calendar.getTime () .getTime ();; calendar.set (2013、11、31); calendar.set (Calendar.HOUR_OF_DAY 0); calendar.set (Calendar.MINUTE 0); calendar.set (Calendar.SECOND 0); .getTime calendar.getTime () (); 长max=calendar.getTime () .getTime ();//得到大于等于最小值小于最大的值的两倍 双randomDate=math . random() *(极大极小)+分钟;//将双值舍入为整数,转化成长类型 calendar.setTimeInMillis (Math.round (randomDate)); .toString返回calendar.getTime () (); }
如果要用日期类处理时间,需要注意,年是从1900年开始计算所以要减1900年去,月是从0开始计算所以要减去1,比如新的日期(2013、10、10)得到的日期对象表示的时间是3913年11月10日。
system . out。println(新日期(2013、10、10)); >之前结果是:
把上面的问题稍微变一下,已知minDate和maxDate,要求把这个时间区间的每一天放入列表。
公共静态孔隙getDateBetweenMaxAndMin () { List列表=new ArrayList (); 日历日历=Calendar.getInstance (); calendar.set (2010、10、10); 日期minDate=calendar.getTime ();//最小时间 calendar.set(1) 2013年,11日; 日期maxDate=calendar.getTime();//最大时间//计算两个时间点相隔多少天 int totalDays=Ints.checkedCast ((maxDate.getTime ()——minDate.getTime ())/(1000 * 60 * 60 * 24)); calendar.setTime (minDate); calendar.set (Calendar.HOUR_OF_DAY 0); calendar.set (Calendar.MINUTE 0); calendar.set (Calendar.SECOND 0); for (int i=0; i<=totalDays;我+ +){ 如果(我!=0){//天数加1 calendar.add (Calendar.DAY_OF_MONTH, 1); } list.add (calendar.getTime ()); } } >之前 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
java生成指定范围的随机日期