簡體   English   中英

兩個日期之間的差異和當前時間java的百分比

[英]Difference between two dates and percentage of current time 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%之間。

你能告訴我這有什么問題嗎? 對於這個問題,我被限制為只使用線程。

檢查如下:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM