当前位置: 首页 > 知识库问答 >
问题:

Java剩余天数计算

慕佑运
2023-03-14

我已经实现了下面的代码来计算剩余的天数。我已经使用SimpleDateFormat将字符串转换为日期。如果输入10/02/1993(今天的日期)作为日期,则输出显示还剩0天。但如果我选择11/02/1993,它显示的输出与0天相同。但如果我改变月份,即1993年2月22日7月2日,它显示的是剩下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));
        }`

共有2个答案

蔡辰钊
2023-03-14

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

java.time提供了一个perio类来表示一段时间,例如天数或小时和分钟。localdate和friends提供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
贺跃
2023-03-14

问题出在线路上

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

这将把今天日期的年份设置为user_selectday,并且当month相等时,它将进入elseif内部并离开same而不做任何更改。

还要检查您提到的if else条件。

 类似资料:
  • 问题内容: 给定月份剩余的天数如何找到当月剩余的天数?例如,如果当前月份为11月,而今天为16/11/2016,则月份中的天数``经过的天数=?我想动态地进行操作在我的示例中30′16 = 14 问题答案: 只需使用Datepart函数:

  • 我想用Java计算生日的剩余天数。如果今天的日期等于输入的日期,我日志今天是我的生日。如果今天的日期不等于输入的日期,我要计算生日的剩余天数。我怎么能那样做? 我的代码:

  • 问题内容: 我一直在搜索有关此主题的信息,但仍然听不懂,如果有人可以详细说明,我将非常感激。 我的任务是将两个变量除以整数除以余数。问题是,我不知道余数是什么,现在我做了类似的事情,这是通过互联网搜索得到的: 如果我例如设置(a = 43)和(b = 67) 然后我会得到这个结果: 现在,由于我不知道其余的是什么(这只是来自互联网的建议),所以我不知道这是否是正确的答案。 谢谢你的帮助, 亲切的问

  • 我使用Laravel 5.3订阅用户的计划与付款处理条。我在stripe上注册了一个计划,并使用以下代码成功订阅了该计划的用户 现在用户已经订阅,但是我如何让用户在该计划中剩下的剩余天数过期。用户表、订阅表和订阅对象没有关于到期日期或天数的任何信息。

  • 要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。 解决(python) #!/usr/bin/env python #coding:utf-8 import random if __name__=="__main__"

  • 我正在尝试用Docker Compose设置Docker机器。 场景1(不使用Docker机器) 如果我在不使用Docker机器的情况下运行,它将按照所希望的方式创建我的3个链接容器(Nginx+MongoDB+NodeJS)。 场景2(使用Docker机器) 然后使用Docker机器创建一个VM,并告诉Docker使用与该机器对话。 此时,如果我ssh到我的docker机器并运行,我将得到: 如