我的申请中有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小时。
为什么它与时区有任何联系?
答案 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");
有关文档,请参阅Duration和DatatypeFactory。
答案 1 :(得分:0)
如果你需要时间间隔,那么只做一些模数计算呢?一小时是3600 * 1000毫秒,白天是86400 * 1000.当您以这种方式创建日期时,您将创建相对于1.1.1970 UTC的日期对象 - 这可能与您的手机认为的时区相距2小时。
答案 2 :(得分:0)
我建议使用两个日期对象,比如
int diffInDays = (newerDate.getTime() - olderDate.getTime()) / (1000 * 60 * 60 * 24)