当前位置:  开发笔记 > 编程语言 > 正文

使用java.time生成随机LocalDate

如何解决《使用java.time生成随机LocalDate》经验,为你挑选了1个好方法。

我正在编写一些代码,用随机数据填充MySQL数据库以进行测试.我需要在DATE1970-2015之间填充一个随机日期的列.

这是相关的方法:

public Date dateGenerator() throws Exception {
    Random ry = new Random();
    Random rm = new Random();
    Random rd = new Random();
    int year = 1969 + ry.nextInt(2015-1969+1);
    int month = 1 + rm.nextInt(12);
    int day = 1 + rm.nextInt(31);

    if (month==2 && day>28){
        day = day - 3;            
    } else {
        if((month%2==0 && month != 8 ) && day==31 ){
            day = day -1;
        }
    }
}

我的目的是创建三个随机整数(日,月,年),并以某种方式将它们组合成一些Date对象以传递给数据库.但数据库拒绝我尝试提供的所有内容.

如果可以的话,如果你可以向我提供基于最新java.time图书馆的建议,那将对我很有教育意义.



1> Tunaki..:

一种简单的方法是将最小和最大日期转换为相应的纪元日,在这两个值之间生成一个随机整数,最后将其转换回a LocalDate.获得的纪元日是toEpochDay()自1970-01-01(ISO)以来的天数.

生成随机年份,然后是月份和日期的问题是,您有一个很小的机会与无效日期(如2月31日)一起下降.此外,采取随机的纪元日保证在所有可能的日期均匀分布.

public static void main(String... args) {
    long minDay = LocalDate.of(1970, 1, 1).toEpochDay();
    long maxDay = LocalDate.of(2015, 12, 31).toEpochDay();
    long randomDay = ThreadLocalRandom.current().nextLong(minDay, maxDay);
    LocalDate randomDate = LocalDate.ofEpochDay(randomDay);
    System.out.println(randomDate);
}

请注意,由于最小日期实际上是第一个,因此可以将其替换为0.

要将其转换LocalDate为a java.sql.Date,您可以参考这篇文章:

java.sql.Date date = java.sql.Date.valueOf(randomDate);

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有