【发布时间】:2020-01-29 09:41:39
【问题描述】:
我正在尝试实现一些可以倒计时事件发生前还剩多少天的东西。虽然处理同一年内的日子很好。但是现在我在显示天数时遇到了问题,其中包括不在当年的天数。例如,如果我输入目标日期为 2020 年 1 月 1 日,当前日期为 2019 年 9 月 30 日。它将返回 -272(天),这通常没有任何意义。
我尝试过在线理解和使用代码,但没有一个对我有用。
以下代码的作用是返回剩余天数,但仅当这些天数在同一年内时才有效。标签日期变量是输入字符串 (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 天。任何可以帮助我实现这一目标的东西都将不胜感激。
【问题讨论】:
-
顺便考虑扔掉长期过时且臭名昭著的麻烦
SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。
标签: java android date calendar date-difference