java - 在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;
解决方案
问题主要是你的SimpleDateFormat
.
您使用大写“D”,它表示“一年中的一天”,您可能需要小写“d”,它表示“一个月中的一天”
您使用大写“Y”,表示“周年”,您可能需要小写“y”,表示“年”
推荐阅读
- api - 如何在 raml 查询参数中定义 map[string][]string
- testcontainers - 如何重启 testcontainers 容器?
- macos - Automator 中的 Shell 脚本在作为变量传递时显示“找不到命令”
- python - 替换字符串 - 位置上的未知标志
- java - 如何使用 android 中的共享首选项更新列表 recyclerview?
- python - 存储用户偏好的 GUI 程序 - Python 课程简介
- asp.net-core - iis反向代理404
- swift - iOS UI 自动化:文本字段的断言错误(以红色突出显示)通过 CTAssertTrue
- python - 如何在 Python 单元测试中修补用于内部方法的类?
- android - IllegalStateException: Fragment DetailFragment 没有从 onCreateView() 返回视图,或者在 onCreateView() 之前调用了该视图