2012-09-19 60 views
1

我試着讓計算兩個日期之間經過的時間,給出了不同的設備不同的結果

在某些設備特定日期經過時(millis)來的時候,我得到正確的結果 然而,在其他設備的I得到錯誤的結果

下面是我使用的代碼:

public static void timeElapsedFromDate(long workingDate) 
{ 
    long diff = System.currentTimeMillis() - workingDate; 

    long diffSeconds = diff/1000; 
    long diffMinutes = diffSeconds/60; 
    long diffHours = diffMinutes/60; 
    long diffDays = diffHours/24; 
    long diffWeeks = diffDays/7; 
    long diffMonth = diffDays/30; 
} 

是不是測量時間的方式?

謝謝!

+0

所有設備是否設置在同一時區? –

+0

那還是他們有相同的時間? – weakwire

+0

@LazyNinja有趣的是,chaning時區並不影響System.currentTimeMillis()。即如果我在改變時區的設備中更改時區,在更改時區後我仍然可以獲得良好結果 – dor506

回答

3

首先,diffMonth配方要求改進:從2月1日到3月1日,通常是28天,但一個月。從9月1日到9月31日是30天,但不到1個月。

關於diffDays的更微妙的問題:不是第一天早上10點到10點之間的1天嗎?

最後,不同的設備可以給出不同的結果:System.currenTTimeMillis()返回UTC,1970年1月1日當前時間和午夜之間以毫秒爲單位的差值。即使所有設備上的時鐘都正確,它們可能會有不同的時區設置。

+0

應該總是以UTC計算時間。 – Shark

0
public int getElapsedTimeInDays(Date start,Date end){ 
    int days=(int)(start.getTime()-end.getTime())/(1000*60*60*24); 
    return days; 
} 
public int getElapsedTimeInHours(Date start,Date end){ 
    int hours=(int)(start.getTime()-end.getTime())/(1000*60*60); 
    return hours; 
} 
public int getElapsedTimeInMinutes(Date start,Date end){ 
    int minutes=(int)(start.getTime()-end.getTime())/(1000*60); 
    return minutes; 
} 
public int getElapsedTimeInSecunds(Date start,Date end){ 
    int scunds=(int)(start.getTime()-end.getTime())/(1000); 
    return secunds; 
} 

//Then you can use the codes like this: 
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd, hh:mm"); 
Date start = df.parse("2012-01-12, 09:35"); 
Date end = new Date();//this will be the curent date; 

int day = getElapsedTimeInDays(start,end); 
相關問題