如何使用Java在01/01/2016到01/01/2017之间生成任意随机日期?

时间:2017-03-01 12:40:51

标签: java

我正在尝试使用Java生成01/01/2016到01/01/2017之间的随机日期。 我想日期应该是DD / MM / YYYY格式。非常感谢您的帮助。我的要求是生成日期DD / MM / YYYY然后转换为字符串。

5 个答案:

答案 0 :(得分:4)

如果使用Java 8,我建议使用新的java.time API:

LocalDate from = LocalDate.of(2016, 1, 1);
LocalDate to = LocalDate.of(2017, 1, 1);
long days = from.until(to, ChronoUnit.DAYS);
long randomDays = ThreadLocalRandom.current().nextLong(days + 1);
LocalDate randomDate = from.plusDays(randomDays);
System.out.println(randomDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));

如果您不想随意生成01/01/2017,即结束日期是独占的,请将days + 1更改为days

答案 1 :(得分:1)

获取介于0和365之间的随机数(2016年有366天),然后将此天数添加到日期1/1/2016

如果使用某个时间库,您可以直接在日期中添加天数,或者通过将Java的日期转换为long来添加它们,然后在添加它之后再添加它们。

然后以您需要的任何格式打印结果。

如果您需要有关此过程的某些特定步骤的帮助,您应该更清楚地指出您的问题。

答案 2 :(得分:1)

Benko正确接受的答案是正确的,但可能更简单的是我们想要整年而不是任意日期。

Year类代表一年,并提供一些方便的方法。我们可以通过指定日期1-365(或闰年中的366)来获取日期。

我们需要一个随机的一年一天。 ThreadLocalRandom类提供线程安全(如果始终通过.current()访问,则是安全的)随机数生成器。我们在一年的第一天指定一个 origin ,并为一年中的一天指定绑定

Year y = Year.of( 2016 );
LocalDate ld = y.atDay( ThreadLocalRandom.current().nextInt( 1 , y.length() ) );

答案 3 :(得分:0)

您可以将Date转换为long然后从这两个random long生成Date,然后您可以从此Date创建random long {1}}:

//get time from your date, it gives you a long
long startDate = new Date("01/01/2016").getTime();
long endDate = new Date("01/01/2017").getTime();

//generate a random long with this start and end date
Random r = new Random();
long random = endDate + (long) (r.nextDouble() * (startDate - endDate));

Date resultdate = new Date(random);
System.out.println(new SimpleDateFormat("yyyy/MM/dd").format(resultdate));

答案 4 :(得分:0)

您可以使用日历初始化日期,然后在0到365之间添加一天,如下所示:

Calendar calendar = Calendar.getInstance();
calendar.set(2016, 0, 0);
calendar.set(Calendar.DAY_OF_YEAR, new Random().nextInt() % 365);
new SimpleDateFormat("dd/MM/yyyy").format(calendar.getTime());