1

コンピューターの時計を変更した後、Java アプリで時刻を取得したいと考えています。これは正しい時間を取得していないようです。

例えば

Computer clock reads 1:30pm; new Date() returns 1:30pm
Change computer clock to 12:30pm;
Computer clock reads 12:30pm; new Date() returns 12:30pm
Change computer clock to 1:30pm;
Computer clock reads 1:30pm; new Date() returns 12:30pm

私のJavaアプリがこの時計の変化を検出することは可能ですか?

更新:Chromeでのみ発生するようです...

4

2 に答える 2

0

Xミリ秒後の時間を継続的にチェックするスレッドを作成できます。時間オフセットが本来あるべき値よりも+-Nより大きい場合(他のプロセスがプロセッサを使用している可能性があるため、小さなエラーが発生する可能性があるため)、時間のオフセットを作成します。次に、自分用の新しい日付クラスを作成し、オフセットを追加して時間を取得します。

完全に正確かどうかはわかりませんが、ほとんどの場合は機能します

編集:スレッドはシステムクロックの時刻を記録し、スリープ状態になります。

たとえば、スレッドのスリープ時間が10秒の場合、エラーレイトを1秒に保ちます。

System clock = 10:00:00そしてRecorded in Thread = 10:00:00Difference = null

スレッドは10秒間スリープします

System clock = 10:00:11そしてRecorded in Thread = 10:00:11それDifference = 11 offset=0が許容範囲内にあるので10+-1

スレッドは10秒間スリープし、sysクロックは1時間増加します

System clock = 11:00:21そしてRecorded in Thread = 11:00:21Difference = 3600 offset = 3599

ここで、このオフセットを差し引く必要があります。10:00:22は正確ではありませんが、近くなります。

于 2012-04-06T18:17:56.107 に答える
0

または、このように「日付」を起動して時間を読み取ることができます

Runtime.exec("date").getInputStream() ...
于 2012-04-06T19:02:35.987 に答える