2012-04-09 136 views
1

在我的应用程序中,我需要解析包含事件结束时间的JSON。当这个事件正在进行时,我需要计算剩下的时间来完成那个evet。要做到这一点我使用这段代码:currentTimeMillis()不返回预期结果

// 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测试了我的应用程序,事件的剩余时间非常奇怪。它出现在负数和距离原始数字非常远的数字。我测试过不同值的应用程序,也没有模式,它们就像随机数,如:

擎天柱黑色 - >21米32S
中兴刀片 - > -38m -57s

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

回答

1

我认为这个问题可能与其中一个设备noy的时钟正确设置。随着时间的推移,你给它看起来差不多是一个小时,这可能是错误的时钟设置的原因。当你考虑时间设定时,也要看看时区。这可能是两台设备显示同一时间,但其中一台设备配置在不同的时区。

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

+0

问题是,我的应用程序几乎在全球范围内使用...我要检查两个设备的时区... – 2012-04-09 18:29:19

+0

你是righ!这是时区!现在的问题就是我之前说过的,我的应用程序在世界范围内使用,这意味着不同的时区...也许检查电话的时区并进行必要的操作?任何其他想法? – 2012-04-09 18:38:23

+0

没有时区本身不是问题,因为你计算绝对时间(自时代以来的时间)。如果您的某个设备无法正确计算此问题,则会发生此问题 – 2012-04-09 18:38:37

1

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

+0

我会试试看,我会告诉你一些东西! – 2012-04-09 18:27:50