2013-04-08 5 views
2

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

http://i.stack.imgur.com/wrsrF.png

А вот моя реализация:

long startMilisecs = System.currentTimeMillis(); 
long currentMilisecs; 
long endDateMilisecs = getEndDate().getTime(); 
int diffMillisecs = ((int)(endDateMilisecs - startMilisecs)/1000)/60; 
int currPerc; 
while (startMilisecs <= endDateMilisecs) 
{ 
    currentMilisecs = (int) System.currentTimeMillis(); 
    currPerc = ((int)currentMilisecs * 100)/diffMillisecs; 
    System.out.println(" Current Percentage: " + currPerc); 
} 

Проблема с этим кодом является то, что процент не начинается с 0, а в от 20 до 40 процентов.

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

+0

, что вы имеете в виду процент не начиная с 0 – Woot4Moo

+0

startMilisecs = System.currentTimeMillis() должна быть Date1 – BlackJoker

ответ

4

проверка ниже:

public static int getPercentageLeft(Date start, Date end) { 
     long now = System.currentTimeMillis(); 
     long s = start.getTime(); 
     long e = end.getTime(); 
     if (s >= e || now >= e) { 
      return 0; 
     } 
     if (now <= s) { 
      return 100; 
     } 
     return (int) ((e - now) * 100/(e - s)); 
    } 
+0

Благодаря это работает отлично – gncvnvcnc

0

Вы должны вычесть начальное время как этот

currPerc = ((currentMilisecs - startMilisecs) * 100)/diffMillisecs; 

, чтобы получить правильный процент.

0

Проблема с System.currentTimeMillis();. Взятые из Javadoc:

общественные статические длинные currentTimeMillis()

Возвращает текущее время в миллисекундах. Обратите внимание, что в то время как единица измерения времени возврата равна миллисекунде, размерность зависит от базовой операционной системы и может быть больше. Например, многие операционные системы измеряют время в единицах десятков миллисекунд.

См. Описание класса Дата для обсуждения незначительных расхождений, которые могут возникнуть между «компьютерным временем» и согласованным универсальным временем (UTC).

Возврат: Разница, измеренная в миллисекундах, между текущим временем и полночью, 1 января 1970 г. UTC.

Таким образом, ваше текущее время в миллисекундах основано на 1 января 1970 UTC, а не на дату начала.

Вам необходимо рассчитать текущее время, вычитая время начала из значения, которое задано System.currentTimeMillis();.

Я в основном формулирую ваше связанное изображение здесь. Другие альтернативные расчеты также могут быть выполнены.

Смежные вопросы