2012-04-09 20 views
1

私のアプリケーションでは、イベントの終了時刻を含むJSONを解析する必要があります。このイベントが進行中の場合、私はそのエベットの終了時に残された時間を計算する必要があります。私は秒単位の時間をしたら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
ZTEブレード - > -38m -57s

を私はしましたSystem.currentTimeMillis()は両方のデバイスで異なる可能性があると考えていましたが、どちらもOSとしてCM7を使用しています。

答えて

1

問題は、デバイスのいずれかの時計が正しく設定されている可能性があります。時間の抽出では、差が正確に1時間であるように見えますが、これは誤ったクロック設定の原因になる可能性があります。あなたが時間を考慮して設定すると、また、タイムゾーンを見てください。両方のデバイスが同じ時刻を表示している可能性がありますが、そのうちの1つが異なるタイムゾーンで設定されている可能性があります。

最新のデバイスでは、ネットでクロックを同期させないようにするのは非常に奇妙ですが、たとえばZTEでも可能です。

+0

問題は、私のアプリがほぼ世界中で使用されていることです...私は両方のデバイスのタイムゾーンをチェックしようとしています... –

+0

あなたは一人でした!それはタイムゾーンでした!問題は今私が前に言ったことです、私のアプリは世界中で使われています、それは別のタイムゾーンを意味します...電話のタイムゾーンをチェックし、必要な操作をしているのでしょうか?他のアイデア? –

+0

絶対時間(エポックからの時間)を計算するため、タイムゾーン自体は問題ありません。あなたのデバイスの1つがこれを正しく計算しないと問題が発生します –

1

System.nanotime()を使用してください。これは、2つのイベント間の時間を測定するために特別に作成されています。 System.currentTimeMillis()は、ではなく、が1ミリ秒ごとに更新するシステムクロックを使用しているため、信頼性が低く、結果が異なります。

+0

私はそれを試してみると、私はあなたに何かを教えてあげる! –