2012-09-19 22 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); 
相关问题