java - 两次之间的差异始终返回 2 或更大

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

为什么它与时区有联系?

最佳答案

使用 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 .

关于java - 两次之间的差异始终返回 2 或更大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776588/

相关文章:

Android布局上述问题

google-sheets - 谷歌表单填充谷歌表中的平均持续时间

ios - AVURLAsset 将持续时间返回为 0

java - Orika:如何映射评估条件的 boolean 值

java - 为什么静态嵌套类不能访问外部类的 "this"指针?

java - 从调用的 java 方法获取输出流

android - 蓝牙连接超时: dm_pm_timer expires

java - 从 API 请求 json 时无法下载超过 16144 个字符

Android 5.0 Lollipop - Nexus 10 重启和未检测到 USB 调试?

image - 输出电影太快了如何控制