How to accurately calculate the age of Java on the date of birth
I tried to calculate the age of several months considered in Java, so I can't subtract a few years I also want to tell users that today is their birthday This is my code so far, but I'm afraid it's a little biased It won't tell whether today is a birthday, even if the two dates it compares are equal The first way I tried to calculate was in milliseconds The reason you see two ways to get the current date is because I'm trying to make it work, but I want to show everyone my work so that they can point me in the right direction
The editor clarified that I mean that 2015-1993 can be 22 or 21, depending on their birthday this year I want to make sure I get the right age with this in mind
public class ShowAgeActivity extends AppCompatActivity { private TextView usersAge; private static long daysBetween(Date one,Date two) { long difference = (one.getTime()-two.getTime())/86400000; return Math.abs(difference); } private Date getCurrentForBirthday() { Date birthday = (Date) this.getIntent().getExtras().get("TheBirthDay"); int birthdayYear = birthday.getYear() + 1900; Calendar cal = Calendar.getInstance(); cal.set(birthdayYear,Calendar.MONTH,Calendar.DAY_OF_MONTH); Date current = cal.getTime(); return current; } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show_age); Date birthday = (Date) this.getIntent().getExtras().get("TheBirthDay"); Date currentDay = Calendar.getInstance().getTime(); long age = daysBetween(birthday,currentDay)/365; usersAge =(TextView)findViewById(R.id.ageTextView); if (birthday.compareTo(getCurrentForBirthday()) == 0 ) { usersAge.setText("It is your birthday,and your Age is " + String.valueOf(age)); } usersAge.setText("Your Age is " + String.valueOf(age)); }
}
Solution
The following is an example of how to calculate a person's age. If today is their birthday and if today is not their birthday, use the new Java The time package class includes Java 8.0 as part of it
LocalDate today = LocalDate.Now(); LocalDate birthday = LocalDate.of(1982,9,26); LocalDate thisYearsBirthday = birthday.with(Year.Now()); long age = ChronoUnit.YEARS.between(birthday,today); if (thisYearsBirthday.equals(today)) { System.out.println("It is your birthday,and your Age is " + age); } else { long daysUntilBirthday = ChronoUnit.DAYS.between(today,thisYearsBirthday); System.out.println("Your age is " + age + ". " + daysUntilBirthday + " more days until your birthday!"); }