我使用以下代码检查一个人的生日:
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 :(得分:2)
我认为问题源于这一行
cal.add(Calendar.YEAR, yearsSpecial);
如果我们查看ADD的javadoc,我们看到它就是这个
public abstract void add(int field,
int amount)
根据日历的规则,将指定的时间量添加或减去指定的日历字段。例如,要从日历的当前时间减去5天,您可以通过调用:
来实现相反,您希望使用set:
cal.set(Calendar.YEAR, yearsSpecial);