2014-10-01 168 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