currentTimeMillis()没有返回预期的结果

时间:2012-04-09 18:15:32

标签: android

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

// 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等设备中的魅力一样。但是今天我用朋友的ZTE Blade测试了我的应用程序,事件剩下的时间非常奇怪。它以负数和数字显示与原始数字相距很远。我用不同的值测试了应用程序并且没有模式,它们就像随机数,例如:

Optimus Black - > 21m 32s
中兴刀片 - > -38m -57s

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

现代设备不能在网络中同步其时钟将是非常奇怪的,但对于中兴仍然可能。例如。