我的应用程序中有 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 小时。
为什么它与时区有联系?
最佳答案
使用 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");
有关文档,请参阅 Duration和 DatatypeFactory .
关于java - 两次之间的差异始终返回 2 或更大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776588/