java - 一定范围内的随机日期时间
问题描述
您好,正在寻找一个示例代码,它将在一个范围内(1960,1970)返回一个 RandomDateTime 作为 1968-02-03 23:02:03。
YYYY-MM-DD HH:MM:SS。
我的代码正在返回我不想要的时区。...
解决方案
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
并指定时区。代码将与上面非常相似。
调用between
以ChronoUnit.SECONDS
整秒计算经过的时间。
调用 toMath.toIntExact
是从 64 位long
到 32 位的更安全的方法int
。如果值溢出,则引发异常。
打印输出randomDateTime
采用ISO 8601格式。如果您想要不同的格式(例如,T
中间没有 ),您可以使用DateTimeFormatter
. 搜索如何。
链接: Oracle 教程:解释如何使用java.time的日期时间。