2014-10-01 127 views
0

我使用下面的代码来检查的人的生日:日期跳过一年计算下一个生日日期

public class Test_Year { 


    static int yearsInterval =1; 
    static int yearsSpecial =0; 
    static Date dateYearsReg; 


    public static void main(String[] args){ 
     yearsToNotify(2013, "0001-10-02"); 
    } 


    public static void yearsToNotify(int yearsElapsedSinceBirth, String dateOfBirth){ 
     Date dt = Convert(d); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(dt); 
     System.out.println(); 


     yearsSpecial = yearsInterval*(1+(years/yearsInterval)); 
     System.out.println(yearsSpecial); 
     cal.add(Calendar.YEAR, yearsSpecial); 
     dateYearsReg = cal.getTime(); 
     System.out.println(dateYearsReg); 
    } 

    public static Date Convert(String S){ 

     String dateStr = S; 
     Date d1 = null ; 

     try { 
      SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); 
      d1 = f.parse(dateStr); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     return d1; 
    } 

} 

理想情况下,上述应该给我的下一个生日和今年应该是2014年,但是我得到2015年的一年。系统日期是2014年10月1日的第一天。任何提示?

在这个保护区里,如果我给这样的电话:yearsToNotify(41,“1972-10-17”);我得到正确的值。看来这是与结果的问题时,我用一年0001

+0

你能明确什么是年,d的'yearsToNotify(int years,String d)'函数? – deKajoo 2014-10-01 10:09:44

+0

年份是自出生以来经过的年数,d是出生日期。对不起,我习惯于不使用标准变量名称。 – Skynet 2014-10-01 10:10:36

回答

2

我认为从这一行

cal.add(Calendar.YEAR, yearsSpecial); 

问题茎如果我们看的javadoc ADD我们看到的正是这种

public abstract void add(int field, 
     int amount) 

根据日历的规则,将指定的时间量添加或减去给定的日历字段。例如,从日历的当前时间减去5天,可以通过调用实现它:

相反,你要使用一套:

cal.set(Calendar.YEAR, yearsSpecial); 
+0

您好,我的救星! :) – Skynet 2014-10-01 10:14:27

+0

但是,请检查以下输入:yearsToNotify(20,“1994-10-02”); – Skynet 2014-10-01 11:13:05

+0

看起来我误解了程序的目的。我们的目标是计算自$ d以来经过$年后的下一个生日。当然,这意味着它在第一时间正常工作? 示例yearsToNotify(2013,“0001-10-02”);所以2013年至2013年已经过去了。这意味着它的2014-10-02。因此,下一个生日将是2015年。 – 2014-10-01 11:29:43