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 日格林威治标准时间午夜)。然后,您正在格式化该日历。它告诉你,你的时区是凌晨 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 回答