Java:日历算法不起作用
我想知道一个人的年龄,如果我有生日和现在。我要做的是从生日中减去年份。本年度为2014年。我的生日样本是1960年,但它返回0而不是53Java:日历算法不起作用,java,calendar,Java,Calendar,我想知道一个人的年龄,如果我有生日和现在。我要做的是从生日中减去年份。本年度为2014年。我的生日样本是1960年,但它返回0而不是53 public class Person implements java.io.Serializable { private static final long serialVersionUID = 7056942232246992667L; String fname, mname, lname, houseNum, street, city,
public class Person implements java.io.Serializable {
private static final long serialVersionUID = 7056942232246992667L;
String fname, mname, lname, houseNum, street, city, state, country;
ArrayList<String> schools = new ArrayList<String>();
int age, yr, mt, dy;
String zipCode, ssn, id;
static Calendar bday;
public Person(String fnamei, String mnamei, String lnamei, int yri, int mti, int dyi, String houseNumi, String streeti, String cityi, String statei, String zipi, String countryi, String idset) {
fname = fnamei; mname = mnamei; lname = lnamei; yr = yri; mt = mti; dy = dyi;
houseNum = houseNumi; street = streeti;
city = cityi; state = statei; zipCode = zipi; country = countryi;
id = idset; age = -1;
bday = new GregorianCalendar(yr, mt, dy);
GregorianCalendar currDate = new GregorianCalendar();
GregorianCalendar thisYearBDay = new GregorianCalendar(Calendar.getInstance().get(Calendar.YEAR), mt, dy);
int thisYear = Calendar.getInstance().get(Calendar.YEAR);
age = thisYear - yr;
if (currDate.before(thisYearBDay)) {
age--;
}
}
public int getAge() {
System.out.println(Calendar.getInstance().get(Calendar.YEAR)); //2014
System.out.println(bday.getInstance().get(Calendar.YEAR)); //1960
return age; //0? Should be 53/54
}
你在打电话吗
bday.getInstance().get(Calendar.YEAR) // 1960
getInstance()
是一个static
方法,它返回一个新的Calendar
对象。您可以在实例上调用static
方法,但正是出于这个原因,我们强烈建议不要这样做
您在初始化到今天(即2014年)的新实例上调用
get(int)
,而不是在bday
引用的实例上调用
2014
2014
53
“如预期”
线路
System.out.println(bday.getInstance().get(Calendar.YEAR)); //1960
打印2014,因为bday.getInstance()
创建了日历的新实例。要打印出生年份,请使用
System.out.println(bday.get(Calendar.YEAR)); //1960
另一个建议是声明接口而不是具体类,例如:
List<String> schools = new ArrayList<String>();
Calendar currDate = new GregorianCalendar();
List schools=new ArrayList();
日历currDate=新的GregorianCalendar();
你用什么值来创建Person
对象?@SotiriosDelimanolis我编辑了它。每次我看到日期时间问题,我都会感叹“JodaTime”。你知道,如果yri=2014,那么年龄将为零,我想……你能澄清你的问题是什么吗?那么是2014:-)[但你知道为什么]是的。这很有帮助。谢谢
List<String> schools = new ArrayList<String>();
Calendar currDate = new GregorianCalendar();