如何从当前日期获得准确的年龄(包括年份和月份)?
How to get accurate age(including year and months) from current date?
我想找到准确的年龄,不仅以年为单位,还应该获得准确的月份。
即当前date:18-05-2015,我要测试的日期是01-01-2010-输出应该是
4年8个月。
public float getAge (int _year, int _month, int _day) {
GregorianCalendar cal = new GregorianCalendar();
int y, m, d,a,b;
//float ans = 0;
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH);
d = cal.get(Calendar.DAY_OF_MONTH);
cal.set(_year, _month, _day);
a = y - (cal.get(Calendar.YEAR));
// b=m-(cal.get(Calendar.MONTH));
if ((m < cal.get(Calendar.MONTH))
|| ((m == cal.get(Calendar.MONTH)) && (d < cal
.get(Calendar.DAY_OF_MONTH)))) {
--a;
}
if(a < 0)
throw new IllegalArgumentException("Age < 0");
ans=a;
return ans;
}
使用Joda时间。最好计算日期差异。Download joda-time.jar and将其粘贴到库中。
然后使用下面的代码:
public static String getTimestampDiff() {
final DateTime start = new DateTime(datefrom.getTime());
final DateTime end = new DateTime(dateto.getTime());
Period p = new Period(start, end);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroAlways().minimumPrintedDigits(2).appendYears()
.appendSuffix(" year", " years").appendSeparator(", ")
.appendMonths().appendSuffix(" month", " months").toFormatter();
/* .appendSeparator(", ").appendDays()
.appendSuffix(" day", " days").appendSeparator(" and ")
.appendHours().appendLiteral(":").appendMinutes()
.appendLiteral(":").appendSeconds().toFormatter();*/
return p.toString(formatter);
}
您应该将 datefrom 和 dateto 声明为 Date class 的引用,例如:static Date datefrom,dateto;
并形成 datefrom 对象,例如:
private DatePickerDialog.OnDateSetListener pickerListener1 = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
@SuppressWarnings("deprecation")
@Override
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
datepickeryear = selectedYear;
datepickermonth = selectedMonth;
datepickerday = selectedDay;
// Show selected date
edfromdate.setText(new StringBuilder().append(datepickeryear)
.append("-").append(datepickermonth + 1)
.append("-").append(datepickerday).append(" "));
datefrom =new Date(datepickeryear, datepickermonth+1, datepickerday);
}
};
这里我使用了日期选择器,但是你可以自己构造一个日期对象。
我想找到准确的年龄,不仅以年为单位,还应该获得准确的月份。 即当前date:18-05-2015,我要测试的日期是01-01-2010-输出应该是 4年8个月。
public float getAge (int _year, int _month, int _day) {
GregorianCalendar cal = new GregorianCalendar();
int y, m, d,a,b;
//float ans = 0;
y = cal.get(Calendar.YEAR);
m = cal.get(Calendar.MONTH);
d = cal.get(Calendar.DAY_OF_MONTH);
cal.set(_year, _month, _day);
a = y - (cal.get(Calendar.YEAR));
// b=m-(cal.get(Calendar.MONTH));
if ((m < cal.get(Calendar.MONTH))
|| ((m == cal.get(Calendar.MONTH)) && (d < cal
.get(Calendar.DAY_OF_MONTH)))) {
--a;
}
if(a < 0)
throw new IllegalArgumentException("Age < 0");
ans=a;
return ans;
}
使用Joda时间。最好计算日期差异。Download joda-time.jar and将其粘贴到库中。
然后使用下面的代码:
public static String getTimestampDiff() {
final DateTime start = new DateTime(datefrom.getTime());
final DateTime end = new DateTime(dateto.getTime());
Period p = new Period(start, end);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.printZeroAlways().minimumPrintedDigits(2).appendYears()
.appendSuffix(" year", " years").appendSeparator(", ")
.appendMonths().appendSuffix(" month", " months").toFormatter();
/* .appendSeparator(", ").appendDays()
.appendSuffix(" day", " days").appendSeparator(" and ")
.appendHours().appendLiteral(":").appendMinutes()
.appendLiteral(":").appendSeconds().toFormatter();*/
return p.toString(formatter);
}
您应该将 datefrom 和 dateto 声明为 Date class 的引用,例如:static Date datefrom,dateto;
并形成 datefrom 对象,例如:
private DatePickerDialog.OnDateSetListener pickerListener1 = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
@SuppressWarnings("deprecation")
@Override
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
datepickeryear = selectedYear;
datepickermonth = selectedMonth;
datepickerday = selectedDay;
// Show selected date
edfromdate.setText(new StringBuilder().append(datepickeryear)
.append("-").append(datepickermonth + 1)
.append("-").append(datepickerday).append(" "));
datefrom =new Date(datepickeryear, datepickermonth+1, datepickerday);
}
};
这里我使用了日期选择器,但是你可以自己构造一个日期对象。