2012-04-24 17 views
1

誰かが助けてくれることを願っています。ゲームの開始時からタイマーを設定しようとしていて、この時間を表示しています。問題は、コードの次のセクションが私に間違った時間を与えることです。それは間違ったフォーマットで、1時間で出ています。Androidのタイマー - 1時間が間違っている

private long startTime; 
private SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS"); 

//Constructor: 
startTime = System.currentTimeMillis(); 

public String getTime() { 
long gameTime = System.currentTimeMillis() - startTime; 
final Date date = new Date(gameTime); 
return timeFormat.format(date); 
} 

一貫して01:00:03:203の出力が得られます。秒は正しいですが、1時間はそこにあるべきではありません。フォーマットは2桁ではなく小数点以下3桁です。

ありがとうございました!

+0

これはできません。どこから 'getTime'メソッドの' startTime'を取っていますか?他のサーバー/システムとの通信には何が関係していますか? –

+0

startTime = System.currentTimeMillis();クラスコンストラクタで実行されます。この問題に影響しないようなコードがたくさんあるので、私はそれをやめました。 – user1354151

答えて

0

あなたの日付はepoch + gameTimeです。今日のあなたの現在のDSTは、今日のDSTと一致していないので、夏時間シフトが発生していると思います。

日付の代わりにカレンダーを使用します。今日から始めて、明示的に時、分、部品等一掃:上記の出力は

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 0); 
cal.set(Calendar.MINUTE, 0); 
cal.set(Calendar.SECOND, 0); 
cal.set(Calendar.MILLISECOND, 3600000 + 60000 + 1000 + 1); 

SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss.SS"); 

System.out.println(timeFormat.format(cal.getTime())); 

です

:01:01:01.01

http://ideone.com/DyQcl

代用番号私は上記の持っているがgameTimeで完了です。

もちろん、ミリ秒目盛りが曜日境界を超えると、これは機能しない可能性があります。

+0

次のコードを追加しても、 'final Date startDate = new Date(startTime); final Date currentDate = new Date(System.currentTimeMillis()); \t \t Log.d( "TIME ERROR"、 "CURRENT TIME:" + timeFormat.format(currentDate)); Log.d( "TIME ERROR"、 "GAME TIME:" + timeFormat.format(startDate)); ' ゲームタイム:17:12:58.231現在の時間:17:13:05.775 – user1354151

+0

最新の動作例を確認してください。 –

+0

ありがとうございました。あなたのソリューションはとにかく働いています! =) – user1354151

関連する問題