[英]Difference between two dates and percentage of current time java
我正在嘗試使用線程制作計時機制,我在獲取兩個日期之間的時間差異方面存在問題,並使用該差異來獲得剩余時間的當前百分比。 這是我想要原型的概念:
這是我的實施:
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%之間。
你能告訴我這有什么問題嗎? 對於這個問題,我被限制為只使用線程。
檢查如下:
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));
}
你需要這樣減去開始時間
currPerc = ((currentMilisecs - startMilisecs) * 100) / diffMillisecs;
獲得正確的百分比。
問題出在System.currentTimeMillis();
。 取自javadoc:
public static long currentTimeMillis()
以毫秒為單位返回當前時間。 請注意,雖然返回值的時間單位是毫秒,但值的粒度取決於底層操作系統,並且可能更大。 例如,許多操作系統以幾十毫秒為單位測量時間。
有關“計算機時間”和協調世界時(UTC)之間可能出現的輕微差異的討論,請參閱類Date的說明。
返回:當前時間與UTC時間1970年1月1日午夜之間的差異(以毫秒為單位)。
因此,您當前的時間(以毫秒為單位)基於1970年1月1日UTC,而不是您的開始日期。
您需要通過從System.currentTimeMillis();
給出的值中減去開始時間來計算當前時間System.currentTimeMillis();
。
我基本上是在這里制定您的鏈接圖像。 也可以進行其他替代計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.