我正在尝试使用Java生成01/01/2016到01/01/2017之间的随机日期。 我想日期应该是DD / MM / YYYY格式。非常感谢您的帮助。我的要求是生成日期DD / MM / YYYY然后转换为字符串。
答案 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());