目前我正在使用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时启动定时器,则无法使用Timer,间隔将设置为6000。
我想每天使用它倍数(就像每小时一样)
非常感谢你。
答案 0 :(得分:4)
您可以使用目标时间创建一个新的Date对象,然后将其转换为系统时间并从System.currentTimeMillis()
中减去它并睡眠那么多ms
如:
Date alarm = DateFormat.parse(___your date here___);
long msToSleep = alarm.getTime() - System.currentTimeMillis();
// Your provided code to sleep for msToSleep ms
答案 1 :(得分:1)
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);
答案 2 :(得分:1)
您可以按Calendar
定义计时器的开始时间。计时器将在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
答案 3 :(得分:0)
你可以这样做:
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();
}
}
}