我正在制作一个应用程序,当用户输入一个位置并退出时可以保存。我必须为此分离 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/