0

アプリケーションに2つのイベントがあります。2つの時間差が必要なので、次のコード行を使用して共有設定に時間を保存します。

public static void PutStatus(Context ctx,boolean stat)
{
        if (ctx != null)
        {
        SharedPreferences shr = ctx.getSharedPreferences("test", Context.MODE_WORLD_READABLE);
        shr.edit().putBoolean("SHIFT", stat).commit();
        if (stat) shr.edit().putLong("START_TIME", System.currentTimeMillis()).commit();
        }



}

次に、これを使用して2つの日付と時刻の差を計算します。

SharedPreferences shr = getApplicationContext().getSharedPreferences("test", Context.MODE_WORLD_READABLE);
            long time_stamp = System.currentTimeMillis() -  shr.getLong("START_TIME", 0);
            Date data = new Date(time_stamp);   

議事録はうまく機能していますが、時間は2時間進んでいます。

なぜそれがタイムゾーンと関係があるのですか?

4

3 に答える 3

3

Javaで期間を取得する適切な方法は、少し複雑です。次の方法で作成します。

import javax.xml.datatype.Duration;
import javax.xml.datatype.DatatypeFactory
...
Duration d = DatatypeFactory.newInstance().newDuration(time_stamp);
System.out.println(d.getHours() + "h:" + d.getMinutes() + "m: " + d.getSeconds() + "s");

ドキュメントについては、 DurationDatatypeFactoryを参照してください。

于 2012-10-08T07:06:39.307 に答える
0

時間間隔が必要な場合は、モジュロ計算を実行するだけではどうでしょうか。1時間は3600*1000ミリ秒、1日は86400 * 1000です。この方法で日付を作成すると、1.1.1970 UTCを基準にした日付オブジェクトが作成されます。これは、携帯電話が想定しているタイムゾーンから2時間離れている場合もあります。

于 2012-10-08T06:51:36.280 に答える
0

次のような2つの日付オブジェクトを使用することをお勧めします

 int diffInDays = (newerDate.getTime() - olderDate.getTime()) / (1000 * 60 * 60 * 24)
于 2012-10-08T07:00:25.900 に答える