Java 如何管理System.currentTimeMillis()剩余的时间

Java 如何管理System.currentTimeMillis()剩余的时间,java,time,milliseconds,Java,Time,Milliseconds,例如,我使用此代码检查用户是否可以执行某些操作。因此,用户每5秒只能执行一个操作 if((System.currentTimeMillis() - lastTime) > 5000) { // Message: Ok, you can do action now. }else{ // Message: Have to wait 5 seconds to do action. return; } lastTime = System.currentTimeMillis

例如,我使用此代码检查用户是否可以执行某些操作。因此,用户每5秒只能执行一个操作

if((System.currentTimeMillis() - lastTime) > 5000)
{
    // Message: Ok, you can do action now.
}else{
    // Message: Have to wait 5 seconds to do action.
    return;
}

lastTime = System.currentTimeMillis();
但是我们都知道,
System.currentTimeMillis()
返回一个long,这个long可以一直增加,直到它变成负数

我的代码应该在需要1个月以上正常运行时间的服务器上运行。因此,我担心在某个时刻,
System.currentTimeMillis()
将返回一个负值,我的代码将始终告诉用户需要等待5秒或相反的时间

我真的很难集中精力处理这段代码并修复它,所以我想问你们是否有关于如何修复这个问题并使我的代码100%安全的技巧。

别担心

你知道这是谁的问题吗


需要更新它的人。

。我不确定这是否是你需要担心的事情。

根据thread,它将在292278994年溢出。我会说时间很充裕:)

System.currentTimeMillis()返回当前时间和1970年1月1日UTC午夜之间的时间(以毫秒为单位)。如果我的计算是正确的(long max/(1000*3600*24*365)),可以表示为long的最大值是9223372036854775807,那么可能会超过292471208年。如果你的程序能存活那么长时间,让那些将在这么多年后出生的人像我们在Y2K问题上那样担心它

正如大家所说的,不要担心,但作为将来的参考,也许你更喜欢用它来问这类问题

import org.joda.time.DateTime;

if(lastTime.plusSeconds(5).isAfterNow()) {
    // Message: Ok, you can do action now.
}
else {
    // Message: Have to wait 5 seconds to do action.
    return;
}

lastTime = new DateTime();

即使它将溢出的时间是遥远的,就像其他人所说的,遥远的未来。这甚至不会是一个问题,因为你正在采取两倍的差异。e、 例如,假设你取的是292278994年和292278995年(看起来是负数),相差仅为1年(正数),例如,如果你取的是

long overflowYear = Long.MIN_VALUE; // overvflow of Long.MAX_VALUE + 1
long okayYear = Long.MAX_VALUE;
// time = 1 (positive due to an underflow!)
long time = overflowYear - okayYear; 
这种情况可能会发生在System.nanoTime()上,因为它没有定义的开始时间,并且比System.nanoTime快一百万倍。然而,只要你考虑时间差,只要相隔不到292年,一个是负的还是正的都无所谓


因此,在回答您的问题时,即使在292278994年之后,您也不会遇到问题,直到应用程序在调用System.currentTimeMillis()之间运行超过292278994年

你有没有看过当它变得消极?典型的懒惰心态。。。把这个问题留给我们的外星杂种超级有知觉的下一代去担心吧。Y2G将是一个巨大的挑战+1:恐龙总共生存了1.8亿年。到那时,我们要么进化,要么消亡我不认为Java会很快消亡,但我希望人类的寿命比Java长。即使在292278994年之后,只要时间差小于292278994年(见我的答案),这也不会是一个问题。谢谢,但这要慢一些。。我认为在64位机器上运行时,我的方式更快。在这种情况下,反转操作并创建
lastTime
var加5秒。我看不出它会使您的速度减慢太多,无论您使用的是哪种机器架构