我正在尝试实现一种可以倒计时事件发生前剩余天数的功能。虽然处理同一年内的日子很好。但是现在我在显示天数方面存在问题,其中包括当年不在的天数。例如,如果我输入目标日期为2020年1月1日,当前日期为2019年9月30日。它将返回-272(天),这通常没有任何意义。
我尝试过在线理解和使用代码,但没有一个对我有用。
下面的代码的作用是返回剩余的天数,但仅在同一年内的天数有效。 labeledDate变量是输入的字符串(dateStamp)的一部分,该字符串仅显示格式为“ dd MMMM yyyy”的日期。
// Show how many days left before event occurs
try {
String labeledDate = viewHolder.dateStamp.getText().toString().substring(5);
Calendar currentDay = Calendar.getInstance();
final Calendar targetDay = Calendar.getInstance();
SimpleDateFormat ourDateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
targetDay.setTime(ourDateFormat.parse(labeledDate));
if (targetDay.compareTo(currentDay) > 0) {
int daysLeft = targetDay.get(Calendar.DAY_OF_YEAR) - currentDay.get(Calendar.DAY_OF_YEAR);
if (daysLeft == 1) {
viewHolder.dayCounter.setText("Tomorrow");
}
else {
viewHolder.dayCounter.setText(daysLeft + " days");
}
}
else if (targetDay.compareTo(currentDay) == 0) {
viewHolder.dayCounter.setText("Today");
}
else {
viewHolder.dayCounter.setText("Expired");
}
} catch (ParseException e) {
Log.d("PARSE EXCEPTION", e.getMessage());
}
根据我目前对Calendar.DAY_OF_YEAR的了解,它包括(也许)365天。如果我输入2020年1月1日这一日期,它将不会收听年份,而只会关注日期和月份。因此,如果我将目标日期输入为2020年1月1日,将当前日期输入为2019年9月30日,则它将从1月1日的日期减去9月30日的日期(忽略的年份)返回-272(天)。
我想要的是,如果我在上面输入内容,它将返回93天而不是-272天。任何可以帮助我实现这一目标的方法都将受到赞赏。
我正在尝试实现一种可以倒计时事件发生前剩余天数的功能。虽然处理同一年内的日子很好。但是现在我在显示...
您的逻辑在同一年工作,只是因为calendar.get(Calendar.DAY_OF_YEAR)
返回从1月1日到该年给定日期的天数。因此,在同一年,目标日期和当前日期按预期工作。让我们通过示例进行探索
这就是我总是能获得日差的方法: