java - 两个单独的 getTime() 调用在不同时间返回相同的值

标签 java android date time

我正在制作一个应用程序,当用户输入一个位置并退出时可以保存。我必须为此分离 Date 对象。当我打印出这些值时,它们返回相同的确切时间,尽管它们是在不同的时间保存的。有什么想法可能导致这种情况吗?

我的checkLocation()方法:

private void checkLocation() {
            float[] distance = new float[2];
            for(int i = 1; i <= AssetLoader.getTotalLocations(); i++) {
                float mItemLat = AssetLoader.getItemLatitude(String.valueOf(i));
                float mItemLong = AssetLoader.getItemLongitude(String.valueOf(i));

                Location.distanceBetween(mLastLocation.getLatitude(), mLastLocation.getLongitude(),
                        mItemLat, mItemLong, distance);

                if(distance[0] > 55){
                    Toast.makeText(getBaseContext(), "Outside, distance from center: " + distance[0] + " radius: " + "55", Toast.LENGTH_LONG).show();
                    if(startDate != null) {
                        stopDate = calendar.getTime();
                        Log.e("STOP DATE", "SAVED");
                        saveTimeDifference(startDate, stopDate, String.valueOf(i));
                    }
                } else {
                    Toast.makeText(getBaseContext(), "Inside, distance from center: " + distance[0] + " radius: " + "55", Toast.LENGTH_LONG).show();
                    if(startDate == null) {
                        startDate = calendar.getTime();
                        Log.e("START DATE", "SAVED");
                    }
                }
            }
        }

计算时差和其他内容的地方:

public static void saveTimeDifference(Date startDate, Date endDate, String id) {
        //TODO: FIX THIS

        //milliseconds
        long difference = endDate.getTime() - startDate.getTime();
        AssetLoader.setItemTimeDifference(id, difference);

        System.out.println("startDate : " + startDate);
        System.out.println("endDate : "+ endDate);
        System.out.println("difference : " + difference);

        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;
        long daysInMilli = hoursInMilli * 24;

        long elapsedDays = difference / daysInMilli;
        difference = difference % daysInMilli;

        long elapsedHours = difference / hoursInMilli;
        difference = difference % hoursInMilli;

        long elapsedMinutes = difference / minutesInMilli;
        difference = difference % minutesInMilli;

        long elapsedSeconds = difference / secondsInMilli;

        Log.e("saveTimeDifference()", elapsedDays + " days, " + elapsedHours + " hours, " + elapsedMinutes + " minutes, " + elapsedSeconds + " seconds");

        AssetLoader.setItemDetails(AssetLoader.getItemName(String.valueOf(id)), AssetLoader.getItemDetails(AssetLoader.getItemName(String.valueOf(id))) + "\nStart Date: " + startDate + " Stop Date: " + startDate);

    }

请注意,在不同时间访问当前时间。在 GregorianCalendar 对象上调用 getTime() 时,似乎保存错误或返回错误的时间。

感谢您的建议!

最佳答案

calendar.getTime() 返回 java.util.Date 对象,表示当前存储在 Calendar 对象中的时间。

当通过调用 Calendar.getInstance() 最初获取日历时(或其他方式),它有“当前时间”。

5 小时后仍会保持相同的时间。这不是“实时”时间,因此多次调用 calendar.getTime() 将获得相同的值。

如果您想捕获当前时间,只需调用 new Date() :

Date startDate = new Date();
// do work
Date stopDate = new Date();
long difference = endDate.getTime() - startDate.getTime();
System.out.println("Work took " + difference + "ms");

关于java - 两个单独的 getTime() 调用在不同时间返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37494207/

相关文章:

java - Batik:当我从线程调用 invokeLater 时出现 IllegalStateException

java - 使用 WebSocket vs XMPP vs MQ 的实时数据显示解决方案

android - 基本 Jetpack Compose Codelab 的 "Cannot find a parameter with this name: items"

javascript - Moment.js .isBefore 将日期与时区偏移量进行比较

python - 按日期对列表的 python 字典进行排序

java - 在android中将旋转设置为对话框

java - byte[] 到 string 以及 String 到 byte[] 保持信息不变

android - 发送 base64 编码的图像会导致图像损坏

android - 如何在本地机器上为 Android 手机设置服务器?

php - 使用 PHP 从 MySQL 添加天数到当前日期