首页 > 解决方案 > 在java android中的两个日期时间之间没有得到正确的毫秒/秒/分钟

问题描述

我正在开发一个应用程序,其中一个时间保存在 firebase 上,另一个是当前用户时间。当应用程序启动时,它会检索带有日期的 Firebase 时间并获取当前用户日期并找到它的分钟数。但问题是它在日期相同时计算准确,平均第一个日期时间是 28/03/2020 10:00,第二个日期是 28/03/2020 11:00。但是,当日期时间像第一个 27/03/2020 10:00 和第二个是 28/03/2020 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;

标签: javaandroiddatedatetime

解决方案


问题主要是你的SimpleDateFormat.

您使用大写“D”,它表示“一年中的一天”,您可能需要小写“d”,它表示“一个月中的一天”

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


推荐阅读