Java时间测量不正确

时间:2018-02-09 07:12:15

标签: java time lejos-nxj

我有一个java代码,它一遍又一遍地运行无限循环,在某些条件下,我想在循环中插入一个额外的步骤/函数调用。

我在循环之外定义了这些变量:

static boolean wait_activate = false; 
static long wait_tmr = -1; 
static int wait_delay = 6; 

然后,在我的无限循环中,当我想启用其他代码时:

if (some-condition) { 
    wait_activate = true; 
    System.out.println("activate"); 
    wait_tmr = (System.currentTimeMillis() / 1000L); 
}

在循环开始时,我有两个检查来插入附加代码:

if (wait_activate && (wait_tmr + wait_delay) < (System.currentTimeMillis() / 1000L)) {
    // if wait period isn't over
    do_additional_stuff(); 
}

if (wait_activate && (wait_tmr + wait_delay) > (System.currentTimeMillis() / 1000L)) {
    // wait time is over: 
    System.out.println("Reset time: " + wait_delay); 
    System.out.println("Stored time: " + wait_tmr); 
    System.out.println("Current time: " + (System.currentTimeMillis() / 1000L)); 
    wait_activate = false; 
    wait_tmr = -1; 
}

现在,时间值都以秒/ unixtime为单位。 (currentTimeMillis / 1000 =秒)。 wait_delay是6.这意味着,两个println只应在激活后约6秒执行(使用wait_activate = true)。

然而,输出是这样的:

activate
Reset time: 6
Stored time: 946685043
Current time: 946685045

我不明白为什么。根据{{​​1}},它应该等待6秒。但是,存储时间和当前时间之间的差异仅为2秒。即使我增加了wait_delay。难道我做错了什么?这是Java中的错误还是我必须使用的奇怪的JRE版本(在LEGO EV3上的LeJOS 0.9.0-beta上运行)?

我是否犯了一个完整的“初学者错误”并且没有看到它?或者还有其他什么东西被打破了?

2 个答案:

答案 0 :(得分:1)

看起来问题在于比较运算符,第一个if条件应该具有&gt;而不是&lt;,而第二个if条件应该包含&lt;而不是&gt;。您也可以将第二个“if”条件转换为第一个“if”条件的“else”,以避免任何进一步的混淆。

答案 1 :(得分:0)

您可能不希望以下任务发生在&amp;在wait_activate为ON时,在无限循环内部。如果条件有所帮助,也许可以将此任务包装好。

wait_tmr =(System.currentTimeMillis()/ 1000L);