2013-04-08 48 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 2013-04-08 13:51:55

+0

startMilisecs = System.currentTimeMillis的()应该是日期1 – BlackJoker 2013-04-08 13:55:52

回答

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 2013-04-08 16:14:07

0

你需要减去这样

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

的起始时间,以获得正确的百分比。

0

问题出在System.currentTimeMillis();。从javadoc的措施:

公共静态长的currentTimeMillis()

返回以毫秒为单位的当前时间。请注意,尽管返回值的时间单位为 毫秒,但 值的粒度取决于底层操作系统,可能会更大。例如,许多操作系统以数十个单位来测量时间,其中毫秒数为几十个单位。

请参阅类别说明日期讨论轻微 “计算机时间”和协调的世界时间(UTC)之间可能出现的差异。

返回: UTC的当前时间与午夜1970年1月1日之间的差值(以毫秒为单位)。

因此,您的当前时间(以毫秒为单位)基于1970年1月1日UTC,而不是您的开始日期。

您需要通过从System.currentTimeMillis();给出的值中减去开始时间来计算当前时间。

我基本上是在这里制定你的链接图像。其他替代计算也可以执行。下面