为了账号安全,请及时绑定邮箱和手机立即绑定

日历秒数在 while 循环中没有增加

日历秒数在 while 循环中没有增加

海绵宝宝撒 2022-12-28 14:19:42
我试图让 while 循环在 5 秒半 (5.5) 后停止,所以我使用 Calendar 库获取分钟的当前秒数,然后将 5.5 递增到它上面。在该过程之后,它循环等待当前时间等于保存的变量我意识到秒数没有增加……这是为什么?代码:package me.fangs.td;import java.util.Calendar;public class Main {    public static void main(String[] args) {        Calendar calendar = Calendar.getInstance();        double timeout = calendar.get(Calendar.SECOND) + 5.5;        while((double) calendar.get(Calendar.SECOND) < timeout) {            System.out.println((double) calendar.get(Calendar.SECOND));            Thread.sleep(1000);        }    }}
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我根本不会使用 Calender 库,而是使用System.currentTimeMillis()


这是一个在 5.5 秒后终止的 while 循环:


long end = System.currentTimeMillis() + 5500;

while (System.currentTimeMillis() < end) {

  //Do something

}

//Exit after 5.5 seconds

这个版本的优点是,您可以在循环运行时更改结束时间,从而更改循环运行的时间。


查看完整回答
反对 回复 2022-12-28
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

与其实现我自己的,我更喜欢/使用Timer它是一种线程工具,可以在后台线程中安排任务以供将来执行。像,


Timer t = new Timer();

TimerTask task = new TimerTask() {

    @Override

    public void run() {

        System.out.println("Five seconds");

    }

};

t.schedule(task, TimeUnit.SECONDS.toMillis(5) + 500); // 5.5 seconds.


查看完整回答
反对 回复 2022-12-28
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

java.time

VoroX的回答是正确的。但是使用 java.time 使它更加优雅和自我记录。


我们通过循环调用Instant.now每次以捕获新的当前时间。日期时间对象不会自动更新。它们是那一刻的快照,冻结了。在每种情况下询问您何时需要当前时间。


Duration wait = Duration.ofSeconds( 5 ).plusMillis( 500 ) ;  // 5.5 seconds.

Instant now = Instant.now() ;

Instant stop = now.plus( d ) ;


while( Instant.now().isBefore( stop ) ) 

{

   // Do some task. 

在实际工作中,我还会添加一个检查,stop.isAfter( start )以防 Duration 被编辑为负值。


查看完整回答
反对 回复 2022-12-28
  • 3 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信