Java 产品失效日期(意外输出)

Java 产品失效日期(意外输出),java,calendar,Java,Calendar,欢迎!我已经编写了下面的代码,希望能够处理这个程序。如果用户手动指定的到期日期早于当前日期,则程序应终止,否则程序将显示剩余期限 当我输入到期日作为当前日期时,即2014年,3月,7日 按照我的预期,该计划应该已经终止,但它显示为1年等。。。剩下的我哪里做错了 // Sets GregorianCalendar expiryDate object static void setTrial(){ System.out.println("\n----- SET TRIAL DATE ----

欢迎!我已经编写了下面的代码,希望能够处理这个程序。如果用户手动指定的到期日期早于当前日期,则程序应终止,否则程序将显示剩余期限

当我输入到期日作为当前日期时,即2014年,3月,7日 按照我的预期,该计划应该已经终止,但它显示为1年等。。。剩下的我哪里做错了

// Sets GregorianCalendar expiryDate object
static void setTrial(){
    System.out.println("\n----- SET TRIAL DATE ----\n");

    System.out.print("Year : ");
    int year = new Scanner(System.in).nextInt();

    System.out.print("Month : ");
    int month = new Scanner(System.in).nextInt();

    System.out.print("Day : ");
    int day = new Scanner(System.in).nextInt();

    expiryDate = new GregorianCalendar(year, month, day);
}

// Validates the expiryDate with current GregorianCalendar object
static void validate(){
    System.out.print("\n----- VALIDATING THE PRODUCT ----\n");
    GregorianCalendar current = new GregorianCalendar();

    if( current.after(expiryDate) ){        
        System.out.println("\nYour trial period is expired. Please buy the product.");
    }else{
        GregorianCalendar temp = new GregorianCalendar(expiryDate.get(GregorianCalendar.YEAR) - 
                        current.get(GregorianCalendar.YEAR), 
                        expiryDate.get(GregorianCalendar.MONTH) - 
                        current.get(GregorianCalendar.MONTH), 
                        expiryDate.get(GregorianCalendar.DAY_OF_MONTH) - 
                        current.get(GregorianCalendar.DAY_OF_MONTH));
        System.out.println("\nYou still have " + 
                        temp.get(GregorianCalendar.YEAR) + " years, " + 
                        temp.get(GregorianCalendar.MONTH) + " months, " + 
                        temp.get(GregorianCalendar.DAY_OF_MONTH) +
                        " days remaining... \n\nPlease buy the product before it expires!");
    }
月份从0(1月)开始到11(12月)

所以你需要做:

expiryDate = new GregorianCalendar(year, month-1, day);
还要注意,Gregorianalendar没有0年(根据),这就是为什么

System.out.println(new GregorianCalendar(0, 3, 8).get(GregorianCalendar.YEAR));
将打印1

相反,您可以执行以下操作:

int yearsRemaining = expiryDate.get(GregorianCalendar.YEAR) - current.get(GregorianCalendar.YEAR);
月份从0(1月)开始到11(12月)

所以你需要做:

expiryDate = new GregorianCalendar(year, month-1, day);
还要注意,Gregorianalendar没有0年(根据),这就是为什么

System.out.println(new GregorianCalendar(0, 3, 8).get(GregorianCalendar.YEAR));
将打印1

相反,您可以执行以下操作:

int yearsRemaining = expiryDate.get(GregorianCalendar.YEAR) - current.get(GregorianCalendar.YEAR);
月份从0(1月)开始到11(12月)

所以你需要做:

expiryDate = new GregorianCalendar(year, month-1, day);
还要注意,Gregorianalendar没有0年(根据),这就是为什么

System.out.println(new GregorianCalendar(0, 3, 8).get(GregorianCalendar.YEAR));
将打印1

相反,您可以执行以下操作:

int yearsRemaining = expiryDate.get(GregorianCalendar.YEAR) - current.get(GregorianCalendar.YEAR);
月份从0(1月)开始到11(12月)

所以你需要做:

expiryDate = new GregorianCalendar(year, month-1, day);
还要注意,Gregorianalendar没有0年(根据),这就是为什么

System.out.println(new GregorianCalendar(0, 3, 8).get(GregorianCalendar.YEAR));
将打印1

相反,您可以执行以下操作:

int yearsRemaining = expiryDate.get(GregorianCalendar.YEAR) - current.get(GregorianCalendar.YEAR);
更改以下内容

expiryDate=新的格里高利安日历(年、月、日)

GregorianCalendar expiryDate=新的GregorianCalendar(年、月、日)

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR-1)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

更改以下内容

expiryDate=新的格里高利安日历(年、月、日)

GregorianCalendar expiryDate=新的GregorianCalendar(年、月、日)

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR-1)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

更改以下内容

expiryDate=新的格里高利安日历(年、月、日)

GregorianCalendar expiryDate=新的GregorianCalendar(年、月、日)

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR-1)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

更改以下内容

expiryDate=新的格里高利安日历(年、月、日)

GregorianCalendar expiryDate=新的GregorianCalendar(年、月、日)

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”

System.out.println(“\n您还有“+temp.get(gregoriandar.YEAR-1)+”年“+temp.get(gregoriandar.MONTH)+”月“+temp.get(gregoriandar.DAY/u/u月)+”剩余天数…\n\n请在产品到期前购买该产品!”