2015-03-31 4 views
0

Я использую Java Timer для запуска определенной задачи. Для моей программы я дам время начала и время окончания в качестве параметров, которые будут задавать таймер java, когда нужно начинать и когда заканчивать задачу.Разница между текущим временем и будущим временем в java

Выполняя мою задачу, я хочу периодически получать и проверять разницу между текущим временем и временем окончания. Если текущее время равно окончанию, то отмените задачу, вызвав метод timer.cancel().

Мои startTime и endTime формат parrameters время, как этого

String startTime = "12:00"; 
String endTime = "12:01"; 
SimpleDateFormat format = new SimpleDateFormat("HH:mm"); 
Date date1 = format.parse(startTime); 
Date date2 = format.parse(endTime); 
long difference = date2.getTime() - date1.getTime(); 

Я хочу, чтобы проверить текущее время равно = Конечное.

Но я хочу, чтобы проверить состояние, что текущее время равно конец времени и вызвать timer.cancel()

ответ

0

Может быть, вы просто не знаете, как получить endTime.

String startTime = "12:00"; 

SimpleDateFormat sDateFormat = new SimpleDateFormat(
      "hh:mm"); 
String endTime = sDateFormat.format(new java.util.Date()); 

if (startTime.equals(endTime)) { 
    timer.cancel(); 
} 

попробовать, и удачи

+0

Отлично работает. Но он не работает в течение 24-часового формата. – vkrams

+0

Не беспокойтесь, это просто. Измените строку 2: 'SimpleDateFormat sDateFormat = new SimpleDateFormat ( " hh: mm ");' to 'SimpleDateFormat sDateFormat = new SimpleDateFormat ( " HH: mm ");' – phony

0

Это не может быть проблема времени ..

Если сравнение двух строк, вы бы лучше использовать equals()

Попробуйте это:

if(currentTime.equals(endTime)) { 
    timer.cancel(); 
} 
+0

Я не обеспокоен состоянием. Мне нужно найти текущее время, равное времени окончания или нет. – vkrams

+0

На самом деле, я не понимаю. Является ли текущее время предоставленным другим классом или вам нужно его получить? А как насчет endTime? Если у вас есть только заданное значение endTime, используйте System.currentTimeMillis(), чтобы получить currentTime в длинном типе и сравнить с данным значением endTime. –

+0

Когда я сравниваю с 'System.currentTimeMillis()' с endTime в миллисекундах, условие 'if' не запускается – vkrams

0

Вы должны использовать "currentTime.equals (Конечное время)" функция для совместного mpare, а не оператор ==. Функция «.equals» проверяет фактическое содержимое строки, оператор == проверяет, являются ли ссылки обоих объектов равными, что недействительно в вашем случае.

0

Вы хотите проверить, совпадает ли текущее время с конечным временем, но на каком уровне вы хотите проверить, равно ли оно - до минуты, секунды или миллисекунды? Поскольку, если вы сравните миллисекунду или ниже, возможно, что вы никогда не сможете отменить, даже если время может быть одинаковым для второго.

Если вы хотите проверить на миллисекунду - просто конвертируйте дату окончания в millis date.getTime() и вычтите System.currentTimeMillis() - если результат равен 0, то он будет равен миллисекунде. Если разница меньше 1000 (1 * 1000), она находится в пределах второй. Если он меньше 60000 (1 * 60 * 1000), он находится в пределах минуты.