gpt4 book ai didi

java - 转换日期中特定范围的随机数

转载 作者:行者123 更新时间:2023-12-02 01:14:24 26 4
gpt4 key购买 nike

我正在尝试读取随机数并将其转换为日期。我尝试使用 java.util.date 和 ThreadLocalRandom 来获取第一个数字。它说“局部变量 d1 可能尚未初始化”

import java.util.concurrent.ThreadLocalRandom;
import java.util.Date;

public class TestDate {

public static void main(String[] args) {


Date d1 = new Date(ThreadLocalRandom.current().nextLong(d1.getTime()));


System.out.println("Today's date is: " + d1.toString());
System.out.println("Milliseconds: " + d1.getTime());
}

}

当我将 d1 设置为变量时,它显示“重复局部变量 d1”

我不明白我的错误在哪里

最佳答案

不要使用日期。使用即时。

    Instant now = Instant.now();
Instant someTime = Instant.ofEpochMilli(
ThreadLocalRandom.current().nextLong(now.toEpochMilli()));
System.out.println(someTime);

示例输出:

2000-09-12T12:14:59.258Z

代码生成 1970 年 1 月 1 日 00:00 UTC(含)和现在(不含)之间的随机时间点。

您尝试使用的 Date 类设计不佳,幸运的是早已过时。不要使用它。使用 java.time,现代 Java 日期和时间 API。和它一起工作真是太好了。暂时使用的类是 Instant

您的代码出了什么问题?

    Date  d1 = new Date(ThreadLocalRandom.current().nextLong(d1.getTime()));

在这一行中,您尝试声明变量 d1 并使用值 if d1 为其分配初始值。这会产生循环依赖。虽然根据自身来定义某些东西有时可能在人类语言中有效,因为人类可以自己思考,但它在 Java 中不起作用。因此,您需要将不依赖于 d1 的其他内容传递给 nextLong

异常(exception):您可能会说递归方法是根据其自身定义的。但这是一个不同的故事。

你的编译器说:

The local variable d1 may not have been initialized

我们想要更清晰的错误消息。在这种情况下,它可以安全地表示尚未初始化(在可能不适用的情况下使用相同的消息)。值得注意的是,它指向 d1.getTime() 中的 d1:在它被调用之前,您试图使用 d1 的值。已初始化。

教程链接

Oracle tutorial: Date Time解释如何使用 java.time。

关于java - 转换日期中特定范围的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58895780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com