2014-11-10 3 views
0

Я создал событие задания заданного часового пояса с помощью java. Мой код ниже.Задание расписания в java с использованием таймера

Timer timer = new Timer(); 
Calendar date = Calendar.getInstance(TimeZone.getTimeZone("Asia/Colombo")); 
date.set(Calendar.HOUR_OF_DAY, 0); 
date.set(Calendar.MINUTE, 0); 
date.set(Calendar.SECOND, 0); 
timer.schedule(new TimerTask() { 
    public void run() { 
     System.out.println("Runs everday morning 12.00 AM"); 
    } 
}, date.getTime(), 1000 * 60 * 60 * 24); 

Но проблема в том, когда вы вызываете этот метод, он быстро запускает эту задачу. Мне нужно выполнять эту работу 12.00 в часовом поясе Азии/Коломбо каждый день. Как это сделать?

+0

Какой часовой пояс установлен на сервере и в какое время он запускается? –

+0

Я запускаю локально сейчас. Итак, азия/colombo сейчас. любая помощь?? – manitaz

+0

Когда это действительно работает? –

ответ

1

Вы планируете свое первое исполнение в прошлом (полночь текущего дня), и поэтому ваша задача будет выполнена немедленно.

Согласно javadoc:

[...] если запланированная первый раз в прошлом, он запланирован к немедленному исполнению.

Самый простой способ исправить это, является добавление 1 день запланированного первого времени выполнения:

date.add(Calendar.DATE, 1); 

Кроме того, вы, вероятно, хотите запланировать выполнение этой задачи, как фиксированной ставка вместо фиксированная задержка. Если вы этого не сделаете, ваша задача будет выполняться чуть позже каждый день, в зависимости от фактического времени, которое требуется для выполнения задачи. Снова, см. javadoc для деталей.

+0

Итак, как установить его для выполнения на следующий день того времени? – manitaz

+0

@manitaz Я обновил свой ответ. –

+0

Thanx много ............. – manitaz