两次之间的差异总是返回2或更大

时间:2012-10-08 06:46:36

标签: java android duration

我的申请中有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();
        }



}

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

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小时。

为什么它与时区有任何联系?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果你需要时间间隔,那么只做一些模数计算呢?一小时是3600 * 1000毫秒,白天是86400 * 1000.当您以这种方式创建日期时,您将创建相对于1.1.1970 UTC的日期对象 - 这可能与您的手机认为的时区相距2小时。

答案 2 :(得分:0)

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

 int diffInDays = (newerDate.getTime() - olderDate.getTime()) / (1000 * 60 * 60 * 24)