【问题标题】:Not getting correct millisecond/seconds/minutes between two date-time in java android [duplicate]在java android中的两个日期时间之间没有得到正确的毫秒/秒/分钟[重复]
【发布时间】:2020-03-28 08:06:27
【问题描述】:

我正在开发一个应用程序,其中一个时间保存在 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;

【问题讨论】:

  • 顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。

标签: java android date datetime


【解决方案1】:

问题主要是你的SimpleDateFormat

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

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

【讨论】:

  • 非常感谢,节省了很多时间。我什至没有注意到我的这个简单错误:)
猜你喜欢
  • 2018-10-15
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
相关资源
最近更新 更多