【问题标题】:How do I generate any random date between 01/01/2016 to 01/01/2017 using Java? [duplicate]如何使用 Java 生成 01/01/2016 到 01/01/2017 之间的任何随机日期? [复制]
【发布时间】:2017-03-01 12:40:51
【问题描述】:

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

【问题讨论】:

  • MS SQL 你可以尝试按 NEWID() 排序
  • 只需创建一个1到367之间的随机数,然后映射到相应的日期
  • 我已经尝试过了,但是那里提到的解决方案不能满足我的要求。
  • @apomene 你能写在这里吗?所以我可以试试。

标签: java


【解决方案1】:

如果使用 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

【讨论】:

  • @FlorentBayle 感谢您的提及,我已经相应地更改了代码。
  • 谢谢。这解决了我的问题 :) 干杯。
【解决方案2】:

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

如果使用某个时间库,您可以直接将日期添加到日期中,或者通过将 java 的 Date 转换为 long 来添加它们,然后在添加后返回。

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

如果您在此过程的某些特定步骤上需要帮助,您可能应该更清楚地说明您的问题。

【讨论】:

  • 请分享您的代码,以便我更好地理解。
【解决方案3】:

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

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

我们需要一个随机的年份。 ThreadLocalRandom 类提供了一个线程安全的(如果总是通过.current() 访问则安全)随机数生成器。我们为一年中的第一天指定 1 的 origin,为一年中的女士日指定一年的长度bound

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

【讨论】:

    【解决方案4】:

    您可以使用日历来初始化您的日期,然后在 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());
    

    【讨论】:

    • 麻烦的Calendar 类和它的兄弟现在是遗留的,被java.time 类所取代。
    猜你喜欢
    • 1970-01-01
    • 2018-07-09
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2021-02-17
    • 1970-01-01
    • 2016-08-17
    相关资源
    最近更新 更多