如果天数包括另一年的天数,我如何得到剩余的天数?

问题描述 投票:2回答:2

我正在尝试实现一种可以倒计时事件发生前剩余天数的功能。虽然处理同一年内的日子很好。但是现在我在显示天数方面存在问题,其中包括当年不在的天数。例如,如果我输入目标日期为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天。任何可以帮助我实现这一目标的方法都将受到赞赏。

我正在尝试实现一种可以倒计时事件发生前剩余天数的功能。虽然处理同一年内的日子很好。但是现在我在显示...

java android date calendar date-difference
2个回答
2
投票

您的逻辑在同一年工作,只是因为calendar.get(Calendar.DAY_OF_YEAR)返回从1月1日到该年给定日期的天数。因此,在同一年,目标日期和当前日期按预期工作。让我们通过示例进行探索


2
投票

这就是我总是能获得日差的方法:

© www.soinside.com 2019 - 2024. All rights reserved.