首页 > 解决方案 > 一定范围内的随机日期时间

问题描述

您好,正在寻找一个示例代码,它将在一个范围内(1960,1970)返回一个 RandomDateTime 作为 1968-02-03 23:02:03。

YYYY-MM-DD HH:MM:SS。

我的代码正在返回我不想要的时区。...

标签: javadaterandomtimerange

解决方案


java.time

    Random rand = new Random();
    LocalDateTime minInclusive = LocalDateTime.of(1960, Month.JANUARY, 1, 0, 0);
    LocalDateTime maxExclusive = LocalDateTime.of(1971, Month.JANUARY, 1, 0, 0);

    int seconds = Math.toIntExact(ChronoUnit.SECONDS.between(minInclusive, maxExclusive));
    int choice = rand.nextInt(seconds);
    LocalDateTime randomDateTime = minInclusive.plusSeconds(choice);
    System.out.println(randomDateTime);

示例输出(刚刚运行):

1960-12-05T19:05:28

我使用LocalDateTime是因为您说您不想要时区,但是您可能会遇到不存在的时间,通常是在夏令时 (DST) 开始时时钟向前转动的春天间隙中的时间。为避免这种风险,请使用ZonedDateTime并指定时区。代码将与上面非常相似。

调用betweenChronoUnit.SECONDS整秒计算经过的时间。

调用 toMath.toIntExact是从 64 位long到 32 位的更安全的方法int。如果值溢出,则引发异常。

打印输出randomDateTime采用ISO 8601格式。如果您想要不同的格式(例如,T中间没有 ),您可以使用DateTimeFormatter. 搜索如何

链接: Oracle 教程:解释如何使用java.time的日期时间。


推荐阅读