2013-04-08 2 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는()이 완벽하게 작동 – 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

감사 날짜 1이어야한다 – gncvnvcnc

0

은 올바른 비율을 얻을이

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

처럼 시작 시간을 뺄 필요가있다.

0

문제는 System.currentTimeMillis();입니다. javadoc 내에서 촬영 :

공공 정적 오래 전에 currentTimeMillis()는

현재 시간을 밀리 초 단위로 돌려줍니다. 단위의 반환 값이 밀리 초인 반면 값의 단위는 기본 운영 체제에 따라 다르며 더 클 수 있습니다. 예를 들어, 많은 운영 체제는 수십 단위 인 밀리 초 단위로 시간을 측정합니다.

"컴퓨터 시간"과 조정 된 세계시 (UTC) 사이에 발생할 수있는 약간의 차이점 인 불일치에 대한 설명은 날짜 클래스 설명을 참조하십시오.

결과 : 현재 시간과 자정, 1970 년 1 월 1 일 사이의 차이 (밀리 초 단위)입니다.

따라서 현재 시간 (밀리 초 단위)은 시작일이 아니라 1970 년 1 월 1 일 기준입니다.

System.currentTimeMillis();의 값에서 시작 시간을 뺀 값으로 현재 시간을 계산해야합니다.

기본적으로 여기에 링크 된 이미지를 공식화합니다. 다른 대안 계산도 수행 될 수 있습니다. 아래