1

在我的应用程序中,我需要解析一个包含事件结束时间的 JSON。当这个事件正在进行时,我需要计算完成那个事件的剩余时间。为此,我使用这段代码:

// I get the time and convert it from millis to seconds
long end = System.currentTimeMillis() / 1000;                      
techsTime.add((int) (queue.event.get("event0").endtime - end));

一旦我获得了以秒为单位的时间,我将其转换为 d,h,m,s。这在一些设备(如 Optimus Black 和 HTC Desire)中就像一种魅力。但是今天我用朋友的中兴Blade测试了我的应用程序,事件的剩余时间很奇怪。它以负数和数字出现,与原始数字相距甚远。我用不同的值测试了应用程序并且没有模式,它们就像随机数,例如:

擎天柱黑 -> 21m 32s
ZTE Blade -> -38m -57s

我认为 System.currentTimeMillis() 在两种设备中可能不同,但它们都使用 CM7 作为操作系统。

4

2 回答 2

2

我认为问题可能在于其中一台设备的时钟设置不正确。根据您提供的时间提取,差异似乎恰好是一小时,这可能是时钟设置错误的原因。当您考虑时间设置时,还要查看时区。可能是两台设备显示相同的时间,但其中一台配置在不同的时区。

现代设备在网络上不同步时钟会很奇怪,但对于中兴通讯来说仍然是可能的。

于 2012-04-09T18:21:41.287 回答
1

使用System.nanotime()- 它是专门为测量 2 个事件之间的时间而创建的。 System.currentTimeMillis()使用不会每 1 毫秒更新一次的系统时钟,因此可靠并给出不同的结果。

于 2012-04-09T18:18:15.617 回答