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日ですが、1か月です。9月1日から9月31日までは30日ですが、1か月未満です。

diffDaysに関するさらに微妙な質問:午後10時から翌朝の午前10時までの1日ではありませんか?

最後に、デバイスごとに異なる結果が得られる方法:System.currenTTimeMillis()は、現在の時刻と1970年1月1日UTCの午前0時との差をミリ秒単位で返します。すべてのデバイスの時計が正しい場合でも、タイムゾーン設定が異なる場合があります。

于 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 に答える