java中的剩余天数计算

时间:2015-02-10 10:53:23

标签: java android algorithm android-calendar

我已经实现了以下代码来计算剩余的剩余天数。我使用SimpleDateFormat将字符串转换为日期。如果我输入10/02/1993(今天' s日期)作为日期,则输出显示0天。但如果我选择11/02/1993,它会显示与剩余0天相同的输出。但是,如果我改变月份,即22/07/1993,则显示剩余160天而不是162天,这是原始结果。我在这做错了什么?任何帮助是极大的赞赏。

private static void calculateNextBirthday() {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter your birthday(dd/MM/yyyy)");
        user_input = in.nextLine();

        SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

        Calendar user_selected_day = new GregorianCalendar();

        Calendar today = new GregorianCalendar();

        Date selected_date = null;
        try {
            selected_date = formatter.parse(user_input);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        user_selected_day.setTime(selected_date);

        int user_selected_month = user_selected_day.get(Calendar.MONTH);
        int CMonth = today.get(Calendar.MONTH);

        int user_selected_date = user_selected_day.get(Calendar.DAY_OF_MONTH);
        int CDate = today.get(Calendar.DAY_OF_MONTH);

        user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));

        user_selected_day.set(Calendar.DAY_OF_WEEK,today.get(Calendar.DAY_OF_WEEK));

        if (user_selected_month < CMonth) {
            user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
        }
        else if (user_selected_month == CMonth){
            if(user_selected_date < CDate){
                user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);  
            }
        }

        long millis = user_selected_day.getTimeInMillis() - today.getTimeInMillis();
        long days;
        days = (millis / (24 * 60 * 60 * 1000));

        System.out.println(String.valueOf(days) + " days left!!");
    }
  

更新:我已更新下面的代码,它运行正常。希望它能帮助将来的某个人。

`       SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");

        Calendar user_selected_day = new GregorianCalendar();

        Calendar today = new GregorianCalendar();

        Date selected_date = null;

        try {
            selected_date = formatter.parse(plainDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        user_selected_day.setTime(selected_date);

        int user_selected_month = user_selected_day.get(Calendar.MONTH);
        int CMonth = today.get(Calendar.MONTH);

        int user_selected_date = user_selected_day.get(Calendar.DAY_OF_MONTH);
        int CDate = today.get(Calendar.DAY_OF_MONTH);

        user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));

        user_selected_day.set(Calendar.HOUR_OF_DAY,today.get(Calendar.HOUR_OF_DAY));
        user_selected_day.set(Calendar.MINUTE,today.get(Calendar.MINUTE));
        user_selected_day.set(Calendar.SECOND,today.get(Calendar.SECOND));
        user_selected_day.set(Calendar.MILLISECOND,today.get(Calendar.MILLISECOND));


        if (user_selected_month < CMonth) {
            user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
        }
        else if (user_selected_month == CMonth){
            if(user_selected_date < CDate){
                user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);  
            }

        }

        long millis = user_selected_day.getTimeInMillis() - today.getTimeInMillis();
        long days;
        if(user_selected_day.getTime()==today.getTime()){
            days = 0;
        }
        else{
            days = (millis / (24 * 60 * 60 * 1000));
        }`

3 个答案:

答案 0 :(得分:1)

问题出在

user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));

这会将今天的年份设置为user_selected天,并且当月份相等时,它将进入 elseif 并且不进行任何更改。

同时检查你提到的if else条件。

答案 1 :(得分:1)

您还可以在Java 8中使用LocalDate类来随时添加/减去日期。

  

java.time提供Period类来表示一段时间,例如   几天,或几小时和几分钟。 LocalDate和朋友们提供   添加或减去句号或其他内容的plus()minus()方法   时间相关的对象。 Period提供工厂方法,例如ofDays()

阅读此示例以供参考。它计算从现在开始的700天的日期:

/**
 * DateAdd -- compute the difference between two dates (e.g., today and 700 days
 * from now).
 */
public class Main {
    public static void main(String[] av) {
        /** Today's date */
        LocalDate now = LocalDate.now();
        Period p = Period.ofDays(700);
        LocalDate then = now.plus(p);
        System.out.printf("Seven hundred days from %s is %s%n", now, then);
    }
}

运行此程序会报告当前日期和时间,以及从现在起七百天后的日期和时间。例如:

Seven hundred days from 2013-11-09 is 2015-10-10

答案 2 :(得分:0)

不要自己进行计算。获得Calendar对象后,使用&#34; add&#34;增加所需值的方法。