Java 如何在android中计算一个人从出生日期算起的确切年龄
如果以上是条件,那么我想打印26作为当前年龄。 第二个示例:出生日期:25-07-1991ddmmyyy 当前日期:2017年1月10日 如果以上是条件,那么我想打印25作为当前年龄 请帮帮我 下面是我尝试过的代码Java 如何在android中计算一个人从出生日期算起的确切年龄,java,android,Java,Android,如果以上是条件,那么我想打印26作为当前年龄。 第二个示例:出生日期:25-07-1991ddmmyyy 当前日期:2017年1月10日 如果以上是条件,那么我想打印25作为当前年龄 请帮帮我 下面是我尝试过的代码 First example: birthdate :10-01-1991(ddmmyyyy) CurrentDate :10-01-2017 }试试这个 private int calculateage(Integer day1, Inte
First example: birthdate :10-01-1991(ddmmyyyy)
CurrentDate :10-01-2017
}试试这个
private int calculateage(Integer day1, Integer month1, Integer year1)
{
Calendar birthCal = new GregorianCalendar(1991, 01, 10);
Calendar nowCal = new GregorianCalendar();
age = nowCal.get(Calendar.YEAR) - birthCal.get(Calendar.YEAR);
boolean isMonthGreater = birthCal.get(Calendar.MONTH) >= nowCal
.get(Calendar.MONTH);
boolean isMonthSameButDayGreater = birthCal.get(Calendar.MONTH) >= nowCal.get(Calendar.MONTH)
&& birthCal.get(Calendar.DAY_OF_MONTH) >= nowCal
.get(Calendar.DAY_OF_MONTH);
if (age < 18) {
Age = age;
}
else if (isMonthGreater || isMonthSameButDayGreater) {
Age = age - 1;
}
return Age;
从中找到解决方案
希望能帮助你 根据的参考,使用以下期间类:
private String getAge(int year, int month, int day){
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.set(year, month, day);
int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
age--;
}
Integer ageInt = new Integer(age);
String ageS = ageInt.toString();
return ageS;
}
希望它能解决您的问题。使用Joda Library:
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
Period p = Period.between(birthday, today);
//Now access the values as below
System.out.println(period.getDays());
System.out.println(period.getMonths());
System.out.println(period.getYears());
LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);
没有图书馆:
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);
Period p = Period.between(birthday, today);
//Now access the values as below
System.out.println(period.getDays());
System.out.println(period.getMonths());
System.out.println(period.getYears());
LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);
}试试这个
public static int getAge(String date) {
int age = 0;
try {
Date date1 = dateFormat.parse(date);
Calendar now = Calendar.getInstance();
Calendar dob = Calendar.getInstance();
dob.setTime(date1);
if (dob.after(now)) {
throw new IllegalArgumentException("Can't be born in the future");
}
int year1 = now.get(Calendar.YEAR);
int year2 = dob.get(Calendar.YEAR);
age = year1 - year2;
int month1 = now.get(Calendar.MONTH);
int month2 = dob.get(Calendar.MONTH);
if (month2 > month1) {
age--;
} else if (month1 == month2) {
int day1 = now.get(Calendar.DAY_OF_MONTH);
int day2 = dob.get(Calendar.DAY_OF_MONTH);
if (day2 > day1) {
age--;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return age ;
使用以下代码段计算年龄:
private String getAge(int year, int month, int day) {
//calculating age from dob
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.set(year, month, day);
int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)) {
age--;
}
return age;
}
这将是从给定日期开始计算年龄的每个条件的合适方法-
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class AgeCalculator {
public static int calculateAge(Date birthdate) {
Calendar birth = Calendar.getInstance();
birth.setTime(birthdate);
Calendar today = Calendar.getInstance();
int yearDifference = today.get(Calendar.YEAR)
- birth.get(Calendar.YEAR);
if (today.get(Calendar.MONTH) < birth.get(Calendar.MONTH)) {
yearDifference--;
} else {
if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)
&& today.get(Calendar.DAY_OF_MONTH) < birth
.get(Calendar.DAY_OF_MONTH)) {
yearDifference--;
}
}
return yearDifference;
}
public static void main(String[] args) throws ParseException {
// date format dd-mm-yyyy
String birthdateStr = "11-01-1991";
SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
Date birthdate = df.parse(birthdateStr);
System.out.println(AgeCalculator.calculateAge(birthdate));
}
}
主要活动
public static String getAge(int year, int month, int day)
{
Calendar dob = Calendar.getInstance();
Calendar today = Calendar.getInstance();
dob.set(year, month, day);
int today_m = today.get(Calendar.MONTH);
int dob_m = dob.get(Calendar.MONTH);
int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
if (dob_m > today_m)
{
age--;
}
else if (dob_m == today_m)
{
int day_today = today.get(Calendar.DAY_OF_MONTH);
int day_dob = dob.get(Calendar.DAY_OF_MONTH);
if (day_dob > day_today) {
age--;}
}
return age+"";
}
我在日历中设置给定的日期,并将年、日和月发送给getAge方法。
您可以根据需要更改日期格式。我知道这已经是一个老问题,但日期计算总是回到讨论中 这是我实际用于获取两个日期之间的确切年份的方法:
public SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf2.parse("2000-03-21"));
String age=Util.getAge(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
-编辑
使用JDK 8更容易获得日期之间的年差:
但在Android JAVA中,这只适用于API 26+,因此最好基于SDK版本使用这两种方法:
public static String getYear(Date value) {
LocalDate date = value.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year = Period.between(date, LocalDate.now()).getYears();
return year > 0 ? Integer.toString(year) : "0";
}
检查Kotlin中的android:
public static String getYear(Date value) {
int year;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
LocalDate date = value.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
year = Period.between(date, LocalDate.now()).getYears();
} else {
Calendar date = Calendar.getInstance();
Calendar today = Calendar.getInstance();
date.setTime(value);
/* get raw year between dates */
year = today.get(Calendar.YEAR) - date.get(Calendar.YEAR);
/* calculate exact year */
if (
(date.get(Calendar.MONTH) > today.get(Calendar.MONTH)) ||
(date.get(Calendar.MONTH) == today.get(Calendar.MONTH) && date.get(Calendar.DATE) > today.get(Calendar.DATE))
) {
year--;
}
}
return year > 0 ? Integer.toString(year) : "0";
}
在这里,我将年龄计算为年/月/日,这可以准确地解决您的问题 输入来自日期选择器 看看这个代码
使用杰克沃顿图书馆。因为它易于使用,并且提供了非常棒的功能 实施 首先,实现年龄模型类:
public void onClick(View v) {
int sday=d1.getDayOfMonth();
int smonth=d1.getMonth();
int syear=d1.getYear();
int eday=d2.getDayOfMonth();
int emonth=d2.getMonth();
int eyear=d2.getYear();
//calculating year
resyear = eyear - syear;
//calculating month
if (emonth >= smonth) {
resmonth = emonth - smonth;
} else {
resmonth = emonth - smonth;
resmonth = 12 + resmonth;
resyear--;
}
//calculating date
if (eday >= sday) {
resday = eday - sday;
} else {
resday = eday - sday;
resday = 31 + resday;
if (resmonth == 0) {
resmonth = 11;
resyear--;
} else {
resmonth--;
}
}
//displaying error if calculated age is negative
if (resday <0 || resmonth<0 || resyear<0) {
Toast.makeText(getApplicationContext(), "Current Date must be greater than Date of Birth", Toast.LENGTH_LONG).show();
t1.setText("Current Date must be greater than Date of Birth");
}
else {
t1.setText("Age: " + resyear + " years /" + resmonth + " months/" + resday + " days");
}
}
第二,一些功能性的东西:
此函数将验证日期,如不大于今天的日期,但如果要更改最大范围,也可以在currentDate参数中传递日期。其次,它还将检查这些日期:2月30日、6月31日,并返回null。。等等
兄弟,我尝试过你的方法示例:我选择了10-01-1991 frm calendar int month1=now.getCalendar.MONTH,我想在int month1中得到int=1,对吗??但是我得到int=0如果我在代码中的任何地方出错,那么请提前告诉我thanx。这是因为android日历,日历中有一个数组包含月份名称,所以月份从0开始,如一月->0,二月->1,等等…您忘记指定日期格式:SimpleDataFormat dateFormat=new SimpleDataFormatDD MM yyyy;仅适用于API 26+
data class AgeModel(val day: Int, val month: Int, val year: Int)
private fun getDate(year: Int, month: Int, day: Int): LocalDate? {
return try {
run { LocalDate.of(year, month, day) }
} catch (e: DateTimeException) {
null
}
}
fun getCalculatedAge(currentDate: LocalDate = LocalDate.now(), year: Int, month: Int, day: Int): AgeModel? {
var curdate = currentDate.dayOfMonth
var curmonth = currentDate.monthValue
var curyear = currentDate.year
val calculateDate = getDate(year, month, if (day == 0) curdate else day)
?: return null
if (calculateDate > currentDate) return null
if (day > curdate) {
curmonth -= 1
curdate += calculateDate.lengthOfMonth()
}
if (month > curmonth) {
curyear -= 1
curmonth += 12
}
return AgeModel(curdate - day, curmonth - month, curyear - year)
}