繁体   English   中英

Java-基于毫秒的条件语句

[英]Java - condition statement based on milliseconds

这里的一个简单问题是,我仅在经过特定时间段(以毫秒为单位)后才需要执行某种方法:

static double incrTrueBinaryErr = 62.5;
static double incrTrueBinaryMov = 31.25;
static double incr01001 = 360000;
static double incr_1101 = 125;
static double incr05008 = 3600000;
static double incr10004 = 1024000;
static double incr22000 = 1000;
static double incr22001 = 1000;

Date currDate;

    while (true)
    {
    currDate = new Date();

    if (currDate.getTime() == currDate.getTime() + incrTrueBinaryErr)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incrTrueBinaryMov)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr01001)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr_1101)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr05008)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr10004)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr22000)
        //do stuff

    if (currDate.getTime() == currDate.getTime() + incr22001)
        //do stuff

    }

但是,由于时间间隔的具体程度,我的程序从不执行任何操作。

这样做的最佳方法是什么?

这种表达式currDate.getTime() == currDate.getTime() + incr01001仅在incr01001 == 0计算为true 出于相同的原因,仅当y == 0x == x + y

要仅在经过特定时间段(以毫秒为单位)后执行某种方法:

您可以使用Thread.sleep(long milliseconds)方法来做到这一点。

try{
  Thread.sleep(5000);//for 5 seconds
} catch(Exception ex){
  System.out.println("Error: "+ex.getMessage());
}

首先尝试让时间超出您的while封锁时间:

Date date = new Date();
while (true)
{
  currDate = new Date();

  if (currDate.getTime() == date.getTime() + incrTrueBinaryErr)
    //do stuff
  //etc.
}

这样,while循环不会一直重新分配日期。

正如您所说,它可能也太具体了,因此对于您的if块可能是:

long timeDifference = date.getTime()+incrTrueBinaryErr-currDate.getTime();

if (Math.abs(timeDifference)<5l)
  //do stuff

如果新时间在您想要的5毫秒之内,请“执行操作”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM