如何解决随机时间和日期
我想获得一个日期,该日期生成从现在到 2685 天的时间和随机时间。我接受的格式必须是“uuuu-MM-dd'T'HH: mm: ssZ”。目前我的程序正在生成一个随机日期,但我无法创建一个随机时间,因为 Duration 与 Period 冲突
public static String generateRandomDateAndTimeInString() {
LocalDate date = LocalDate.now()
.minus(Period.ofDays((new Random().nextInt(2685))));
return formatDate(date);
}
public static String formatDate(LocalDate date) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ");
return date.atStartOfDay().atOffset(ZoneOffset.UTC).format(dtf);
}
解决方法
Instant now = Instant.now();
Instant then = now.minus(2685,ChronoUnit.DAYS);
long millisBetween = ChronoUnit.MILLIS.between(then,now);
Instant randomTime = then.plusMillis(ThreadLocalRandom.current().nextLong(millisBetween));
System.out.println(randomTime);
示例输出:
2019-09-13T10:21:21.078242Z
如果您不想要秒的分数:
System.out.println(randomTime.truncatedTo(ChronoUnit.SECONDS));
2019-09-13T10:21:21Z
我发现只绘制一个随机数并让它决定日期和时间比分别绘制日期和时间更简单。 ThreadLocalRandom
比 Random
的优势在于提供了绘制随机 long
的选项。这种方式也有可能产生今天的时间,但仅限于已经过去的那部分时间。
我正在利用这样一个事实,即您要求的格式与 Instant
从其 toString
方法产生的结果一致。该格式称为 ISO 8601,是一种国际标准(ISO 代表国际标准化组织)。
链接
,可能是这样的吗?
public static String generateRandomDateAndTimeInString() {
ThreadLocalRandom random = ThreadLocalRandom.current();
LocalDate date = LocalDate.now()
.minus(Period.ofDays((random.nextInt(2685))));
LocalTime time = LocalTime.of(random.nextInt(0,23),random.nextInt(0,59),59));
return formatDate(LocalDateTime.of(date,time));
}
public static String formatDate(LocalDateTime date) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssZ");
return date.atOffset(ZoneOffset.UTC).format(dtf);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。