Java \ Android时间戳返回错误的小时值

时间:2012-08-11 22:08:21

标签: java android timestamp

出于某种原因,我只花了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;

            }
        }
    });

为什么小时错了?

2 个答案:

答案 0 :(得分:1)

假设3334是经过的时间,您将日历设置为自纪元以来的3.334秒(大约1970年12月31日格林威治标准时间午夜)。然后你要格式化那个日历。而且它告诉你,你的时区是凌晨2点加3秒,我猜你的时区是GMT + 2.

不要将Calendar和SimpleDateFormatter用于已用时间 - 它不适合作业。请看一下Apache-Commons中的DurationFormatUtils。

答案 1 :(得分: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);
}

^那会更好