Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java\Android时间戳返回错误的小时值_Java_Android_Timestamp - Fatal编程技术网

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

Java\Android时间戳返回错误的小时值,java,android,timestamp,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 pu

由于某种原因,我只运行了几秒钟,却得到了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;

            }
        }
    });

为什么时间不对?

代码对我来说运行良好。你能告诉我在哪里调用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);
}

^这会好得多

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


不要使用Calendar和SimpleDataFormatter计算运行时间-它不是适合此作业的工具。请查看Apache Commons中的DurationFormatUtils。

我的I\O输出的最后一行是调用此方法。你可以看到它只运行了几秒钟(根据时间戳),但它打印出来的时候好像已经过了2个小时。我想这一定与GMT时间有关,因为我在GMT+3中,我使用了一些GMT设置,并且小时值已更改。但是我不知道如何在我的codeCalendar中解决这个问题。getInstance()应该返回与系统相同时区的日历。你能把代码显示在你调用它的地方吗?等等,你是在传递一段经过的时间吗?你不能这么做-Calendar.setTimeInMillis希望从新纪元开始就有一段时间。在2017年,看看
java.time.Duration
。那么我获得这些信息的最佳方式是什么?我需要知道从用户“点击进来”到他点击出去已经有多长时间了“@Yosi199:您正在尝试设置持续时间(经过了多少毫秒)-但这不是日期和时间。将'timeStampOut'和
timeStampIn
设置为日期/时间值是合理的(尽管我建议使用HH而不是HH)但是你不应该试图用那种方式格式化
getShiftLength
。谢谢你们,我现在更明白为什么它是错的了。你介意给我举个例子,说明什么是正确的方式吗?@Yosi199,看看安卓DateUtils.formatElapsedTime