Bal*_*usC 21
首先,您需要确定哪一个比另一个更旧.然后使用一个while循环,在其中测试较旧的循环是否是after()较新的循环.在旧版本上调用Calendar#add()one(1)Calendar.YEAR来添加年份.保持柜台计算年数.
开球示例:
Calendar myBirthDate = Calendar.getInstance();
myBirthDate.clear();
myBirthDate.set(1978, 3 - 1, 26);
Calendar now = Calendar.getInstance();
Calendar clone = (Calendar) myBirthDate.clone(); // Otherwise changes are been reflected.
int years = -1;
while (!clone.after(now)) {
clone.add(Calendar.YEAR, 1);
years++;
}
System.out.println(years); // 32
Run Code Online (Sandbox Code Playgroud)
这就是说,Date与Calendar在Java SE API的实际上是史诗般的失败.在规划即将推出的Java 8时,有一个新的Date API,JSR-310与Joda-Time非常相似.到目前为止,你可能想要考虑Joda-Time,因为它确实简化了这样的日期/时间计算/修改.以下是使用Joda-Time的示例:
DateTime myBirthDate = new DateTime(1978, 3, 26, 0, 0, 0, 0);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
int years = period.getYears();
System.out.println(years); // 32
Run Code Online (Sandbox Code Playgroud)
更清晰简洁,不是吗?
Kev*_*vin 10
Calendar dobDate; // Set this to date to check
Calendar today = Calendar.getInstance();
int curYear = today.get(Calendar.YEAR);
int curMonth = today.get(Calendar.MONTH);
int curDay = today.get(Calendar.DAY_OF_MONTH);
int year = dobDate.get(Calendar.YEAR);
int month = dobDate.get(Calendar.MONTH);
int day = dobDate.get(Calendar.DAY_OF_MONTH);
int age = curYear - year;
if (curMonth < month || (month == curMonth && curDay < day)) {
age--;
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免循环,并且应该精确到当天.
| 归档时间: |
|
| 查看次数: |
24886 次 |
| 最近记录: |