怎么用currentTimeMilis()说60秒

时间:2017-12-04 18:18:25

标签: java

我试图输出一个从列表中输出随机单词的代码,用户必须在60秒过后输回尽可能多的单词我正在使用6000000000000来跟踪时间所以这很难让我弄清楚我尝试了下面的代码并且它说1512409897444太大了但是当我输出当前/开始时间时,它输出long currentTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis(); System.out.println(currentTime); System.out.println(startTime); while (startTime <= 6000000000000) { (etc. ect.) } 所以这不是&#39对我有意义。

DialogComponent

3 个答案:

答案 0 :(得分:4)

你想要做的是将当前时间与你开始的时间进行比较,并检查它们的差异是否低于60秒,即60000毫秒:

long startTime = System.currentTimeMillis();
while ((System.currentTimeMillis() - startTime) <= 60000) {
    // still under 60 seconds...
}

答案 1 :(得分:3)

System.currentTimeMillis()返回一个从“epoch”增加的值。您必须减去两个时间值以确定已经过的时间量。

long startTime = System.currentTimeMillis();

long elapsedTime = 0;
while (elapsedTime <= 60000) {
    // etc, etc, etc
    elapsedTime = System.currentTimeMillis() - startTime;
}

答案 2 :(得分:3)

正如其他人已经回答的那样,您必须将开始时间减去当前时间,以确定差异是否大于60秒(60,000毫秒)。您还可以使用TimeUnit获取更具可重复性的代码:

long startTime = System.currentTimeMillis();
while (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - startTime) <= 60) {
    //do stuff
}

修改

如果您想知道为什么6000000000000给出错误而currentTimeMillis()(1512409897444)的结果不是,那是因为它们是不同的数据类型:int(32位)vs long(64位) )。文字值6000000000000被解释为一个int值,它比最大支持的32位signed int值(2,147,483,647)更好,并且编译器不允许这样做。如果您使用长文字而不是6000000000000L(请注意最后的L),它会起作用。签名long的最大支持值为9,223,372,036,854,775,807System.currentTimeMillis()的结果是长值,因此1512409897444有效。请阅读Primitive Data Types以获取更多信息。