使用了最新的java8的java.time类,并提供了LocalDateTime和java.util.Date之间的转换。
使用方法:
randomLocalDateTime(-3,3) : 取距离今天前后2天的日期。如果今天为7月12日,则日期随机范围为7月10日~7月14日
测试方法 :
@org.junit.Test public void testRandomDateTime(){ for(int i=0;i<10;i++){ System.out.println(randomLocalDateTime(-3,3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"))); } }
测试结果:
源程序:
/** * 取范围日期的随机日期时间,不含边界 * @param startDay * @param endDay * @return */ public LocalDateTime randomLocalDateTime(int startDay,int endDay){ int plusMinus = 1; if(startDay < 0 && endDay > 0){ plusMinus = Math.random()>0.5?1:-1; if(plusMinus>0){ startDay = 0; }else{ endDay = Math.abs(startDay); startDay = 0; } }else if(startDay < 0 && endDay < 0){ plusMinus = -1; //两个数交换 startDay = startDay + endDay; endDay = startDay - endDay; startDay = startDay -endDay; //取绝对值 startDay = Math.abs(startDay); endDay = Math.abs(endDay); } LocalDate day = LocalDate.now().plusDays(plusMinus * RandomUtils.nextInt(startDay,endDay)); int hour = RandomUtils.nextInt(1,24); int minute = RandomUtils.nextInt(0,60); int second = RandomUtils.nextInt(0,60); LocalTime time = LocalTime.of(hour, minute, second); return LocalDateTime.of(day, time); } /** * 取范围日期的随机日期时间,不含边界 * @param startDay * @param endDay * @return */ public Date randomDateTime(int startDay,int endDay){ LocalDateTime ldt = randomLocalDateTime(startDay,endDay); ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); }