场景:一场考试安排在2023/7/12 12:00:00 —— 2023/7/14 13:00:00 ,考试时长120分钟(页面倒计时剩余时间)。
说明:代码位于实体类字段的setter()方法中,实体类字段有createTime(创建时间)、endTime(结束时间)、leftSeconds(剩余时间)、其他属性
1.开始考试时可以退出,退出时考试时长正常流逝(离开时长也算入考试时长)
// 剩余时间
public void setLeftSeconds(String time){
Calendar cl = Calendar.getInstance();
//创建时间
cl.setTime(this.getCreateTime());
//加上考试时长
cl.add(Calendar.MINUTE, Integer.valueOf(time));
this.leftSeconds = (cl.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
2.当我在2023/7/14 12:00:00第一次进入考试时,页面显示到计时应为60分钟而不是120分钟,进一步优化如下:
// 剩余时间
public void setLeftSeconds(String time){
Calendar cl = Calendar.getInstance();
//创建时间
cl.setTime(this.getCreateTime());
cl.add(Calendar.MINUTE, Integer.valueOf(time));
Calendar cl2 = Calendar.getInstance();
//结束时间
cl2.setTime(this.getEndTime());
//创建时间+考试时长处于结束时间之后,则拿结束时间处理
if(cl.after(cl2)){
this.leftSeconds = (cl2.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}else{
this.leftSeconds = (cl.getTimeInMillis() - System.currentTimeMillis()) / 1000;
}
}