目前我使用Java计时器来重复一项任务,但目前,我只能指定每30秒一次的时间。。。通过使用
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
}
}, 30 * 1000, 30 * 1000);
然而,我真正想要的是这种约束:
任务将每HH:MM运行一次,MM(分钟)=00,HH(小时)可以是10、15、19。。。
我希望我把问题描述得足够清楚,就像每个HH点一样,任务都会运行。
我发现如果我不在HH:00点启动计时器,并且间隔将设置为6000,那么就不可能使用计时器。我想每天用几次(像每小时一样)
非常感谢。
您可以用目标时间创建一个新的Date对象,然后将其转换为系统时间,并将其从System.currentTimeMillis()
中减去,然后休眠那么多毫秒
如:
Date alarm = DateFormat.parse(___your date here___);
long msToSleep = alarm.getTime() - System.currentTimeMillis();
// Your provided code to sleep for msToSleep ms
You can use below code to run TimerTask every hours HH:00:-
Timer timer = new Timer();
Calendar cd = Calendar.getInstance();
Date dt = cd.getTime();
long mmss = dt.getMinutes() * 60 + dt.getSeconds();
long remTime = 60 * 60 * 60 - mmss;
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
}
}, remTime * 1000, 60*60 * 60 * 1000);
您可以通过Calendar
定义Timer的开始时间。计时器将在Calendar
时间启动,
Calendar today = Calendar.getInstance();
Calendar startCal = Calendar.getInstance();
startCal.set(today.get(Calendar.YEAR),today.get(Calendar.MONTH),
today.get(Calendar.DAY_OF_MONTH), today.get(Calendar.HOUR),
00);
|_ Here set the start minutes at 00
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("beep");
}
}, startCal.getTime(), 30 * 1000);
|
|_ It will start on every 00 minutes of
您可以这样做:
private static final int SLEEP_TIME=1000;//your sleep time (mili second)
public void Routine(){
while(true){
try {
//your code goes here
Thread.sleep(SLEEP_TIME);
if(someCondition)
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}