0

数秒間しか実行していないのに、何らかの理由で時計に2時間かかります。タイムスタンプとコードの結果は次のとおりです。

08-12 01:03:47.858: I/System.out(2856): 1344722627872
08-12 01:03:51.198: I/System.out(2856): 1344722631206
08-12 01:03:54.698: I/System.out(2856): 3334
08-12 01:03:54.758: I/System.out(2856): 02:00:03




public static String getDate(long milliSeconds, String dateFormat)  {

    DateFormat formatter = new SimpleDateFormat(dateFormat);

     Calendar calendar = Calendar.getInstance();
     calendar.setTimeInMillis(milliSeconds);
     return formatter.format(calendar.getTime());   }

これは、呼び出しを含む完全なコードです。

// Click Listener for Check In\Out Button

    checkIn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Check Out
            myVib.vibrate(10);
            if (clicked == true) {
                timeStampWhenOut = System.currentTimeMillis();
                killcheck = true;
                checkedStatus = "Check In";
                checkIn.setText(checkedStatus);
                long getShiftLength = ShiftLength(timeStampWhenIn,
                        timeStampWhenOut);
                System.out.println(timeStampWhenOut);
                System.out.println(getShiftLength);
                System.out.println(getDate(getShiftLength, "hh:mm:ss"));
                clicked = false;
                wasShift = true;

                // Check In
            } else if (clicked == false) {

                timeStampWhenIn = System.currentTimeMillis();
                System.out.println(timeStampWhenIn);
                checkedStatus = "Check Out";
                checkIn.setText(checkedStatus);
                killcheck = false;
                clicked = true;

            }
        }
    });

なぜ時間が間違っているのですか?

4

2 に答える 2

1

が経過時間であると仮定する3334と、エポックから 3.334 秒 (1970 年 12 月 31 日のほぼ午前 0 時 GMT) にカレンダーを設定しています。次に、そのカレンダーをフォーマットしています。そして、あなたのタイム ゾーンでは午前 2 時プラス 3 秒であることを示しています。これにより、あなたのタイム ゾーンは GMT+2 であると推測されます。

経過時間に Calendar と SimpleDateFormatter を使用しないでください。これは、ジョブに適したツールではありません。代わりに、Apache-Commons の DurationFormatUtils を見てください。

于 2012-08-11T22:20:59.440 に答える
0

コードは私にとってはうまく機能しています。getDate メソッドを呼び出す場所を教えてください。使用方法は次のとおりです。

System.out.println(getDate(System.currentTimeMillis(), "hh:mm:ss"));

そして、それは適切な時間を記録しています(私にとって現在の6:10:29)

編集: なぜ途中でカレンダーを使用しているのですか? メソッドにミリ秒を渡すと、それがカレンダーに入れられ、すぐに元に戻ります。

public static String getDate(long milliSeconds, String dateFormat)  {

    DateFormat formatter = new SimpleDateFormat(dateFormat);

     return formatter.format(milliSeconds);
}

↑そのほうがよさそう

于 2012-08-11T22:10:39.520 に答える