在java android中,两个日期时间之间的毫秒/秒/分不正确

在java android中,两个日期时间之间的毫秒/秒/分不正确,java,android,date,datetime,Java,Android,Date,Datetime,我正在开发一个应用程序,其中一个时间保存在firebase上,另一个是当前用户时间。当应用程序启动时,它检索firebase时间和日期,获取当前用户日期并查找其分钟数。但问题是,它计算的确切日期是相同的,平均第一个日期时间是2020年3月28日10:00,第二个是2020年3月28日11:00。但当日期时间与前一个日期时间为2020年3月27日10:00,第二个日期时间为2020年3月28日01:00时,则不根据日期进行计算,而是根据同一天再次计算,并显示3小时。如果日期变化太大,则结果显示为负

我正在开发一个应用程序,其中一个时间保存在firebase上,另一个是当前用户时间。当应用程序启动时,它检索firebase时间和日期,获取当前用户日期并查找其分钟数。但问题是,它计算的确切日期是相同的,平均第一个日期时间是2020年3月28日10:00,第二个是2020年3月28日11:00。但当日期时间与前一个日期时间为2020年3月27日10:00,第二个日期时间为2020年3月28日01:00时,则不根据日期进行计算,而是根据同一天再次计算,并显示3小时。如果日期变化太大,则结果显示为负号。 我搜索得太多了,但也找不到关于堆栈溢出的最佳解决方案。对于这个问题,大多数被接受的答案都和我一样使用相同的代码,但对我来说没有任何效果

我的代码是:

SimpleDateFormat format = new SimpleDateFormat("DD/MM/YYYY HH:mm");

String currentTime = format.format(Calendar.getInstance().getTime());

try {
    d1 = format.parse(currentTime);
    d2 = format.parse(submitTime);
} catch (ParseException e) {
    e.printStackTrace();
}

long duration  = d1.getTime() - d2.getTime();
Toast.makeText(this, ""+duration, Toast.LENGTH_LONG).show();
int minutes= (int) TimeUnit.MILLISECONDS.toMinutes(duration);

if (minutes>=60)
{
    int hrs = (int) TimeUnit.MINUTES.toHours(minutes);
    mOut.setText(""+hrs+"h "+minutes+"min");
}
else if (minutes>1440)
{
    int days = (int) TimeUnit.MINUTES.toDays(minutes);
    mOut.setText(""+days+"days");
}
else
{
    mOut.setText(""+minutes);
}

getFinal = Integer.parseInt(timeS)-minutes;

问题主要是您的
SimpleDataFormat

如果使用大写字母“D”,表示“一年中的某一天”,则可能需要小写字母“D”,表示“月中的某一天”


您使用大写字母“Y”,表示“周-年”,您可能需要小写字母“Y”,表示“年”

问题主要是您的
简化格式

如果使用大写字母“D”,表示“一年中的某一天”,则可能需要小写字母“D”,表示“月中的某一天”


您使用大写字母“Y”,表示“周-年”,您可能需要小写字母“Y”,表示“年”

谢谢,节省了很多时间。我甚至注意不到我的这个简单错误:)非常感谢,节省了很多时间。我甚至不能注意到我的这个简单错误:)作为一个旁白,考虑扔掉长期过时和臭名昭著的麻烦代码< SimpleDateFormat >代码>和朋友,并添加到Android项目中,以便使用JavaAtTimes,现代java日期和时间API。这是一个更好的工作。作为一个旁白,考虑扔掉长期过时和臭名昭著的麻烦<代码> SimpleDateFormat <代码>和朋友,并添加到Android项目中,以便使用JavaAtTimes,现代java日期和时间API。和你一起工作真是太好了。