1

我试图获取从特定日期经过的时间(以毫秒为单位)

在某些设备中我得到正确的结果,但是在其他设备中我得到错误的结果

这是我使用的代码:

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;
}

这不是测量时间的方法吗?

谢谢!

4

2 回答 2

3

首先,diffMonth公式要求改进:从2月1日到3月1日通常是28天,但是一个月。从 9 月 1 日到 9 月 31 日是 30 天,但不到 1 个月。

关于 diffDays 的更微妙的问题:不是晚上 10 点到第二天早上 10 点之间的 1 天吗?

最后,不同的设备如何给出不同的结果:System.currenTTimeMillis()返回当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。即使所有设备上的时钟都是正确的,它们也可能具有不同的时区设置。

于 2012-09-19T10:03:37.880 回答
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); 
于 2012-09-19T11:58:29.100 回答