0

我的应用程序中有 2 个事件。我需要他们两个之间的时间差,所以我使用这行代码将时间存储在 sharedpreferences 中:

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



}

然后我使用这个计算两个日期和时间之间的差异:

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

我建议使用两个日期对象,例如

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

If you need time interval, what about just doing some modulo computations? An hour is 3600 * 1000 milliseconds, day is 86400 * 1000. When you create date this way, you are creating date object relative to 1.1.1970 UTC - this may be as well 2 hours off from timezone where your phone thinks to be.

于 2012-10-08T06:51:36.280 回答