Calculate age using date of birth

I am developing an Android application to find the age from the date of birth provided by the user. Three text texts are one for the day and two others for the month and year. I got the code from this link . But I do not know what to do next ... I give the code so far, I created ... pls check and help me ...

main_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="32dp" android:layout_marginTop="42dp" android:ems="10" android:inputType="date" > <requestFocus /> </EditText> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="30dp" android:ems="10" android:inputType="date" /> <EditText android:id="@+id/editText3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/editText2" android:layout_below="@+id/editText2" android:layout_marginTop="24dp" android:ems="10" android:inputType="date" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editText3" android:layout_centerHorizontal="true" android:layout_marginTop="82dp" android:onClick="getAge" android:text="Button" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="54dp" android:text="TextView" /> </RelativeLayout> 

MainActivity.java

 public class MainActivity extends Activity { long a =0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText et1 = (EditText) findViewById (R.id.editText1); EditText et2 = (EditText) findViewById (R.id.editText2); EditText et3 = (EditText) findViewById (R.id.editText3); Button btn1 = (Button) findViewById (R.id.button1) ; TextView tv1 = (TextView) findViewById (R.id.textView1); } public int getAge (int _year, int _month, int _day) { GregorianCalendar cal = new GregorianCalendar(); int y, m, d, a; 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); 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"); return a; } } 
+6
source share
4 answers

You should add a click listening button to your button, then calculate the age in it and display it in a text editor.

 public class MainActivity extends Activity { long a =0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText et1 = (EditText) findViewById (R.id.editText1); final EditText et2 = (EditText) findViewById (R.id.editText2); final EditText et3 = (EditText) findViewById (R.id.editText3); Button btn1 = (Button) findViewById (R.id.button1) ; final TextView tv1 = (TextView) findViewById (R.id.textView1); btn1.setOnClickListener(new OnClickListener{ @Override public void onClick (View v){ int day = Integer.parseInt(et1.getText().toString()); int month = Integer.parseInt(et2.getText().toString()); int year = Integer.parseInt(et3.getText().toString()); tv1.setText(String.valueOf(MainActivity.this.getAge(year, month, day))); } }); } public int getAge (int _year, int _month, int _day) { GregorianCalendar cal = new GregorianCalendar(); int y, m, d, a; 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); 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"); return a; } } 
+20
source

When you click the button, just pass the values ​​from the text fields to the method and show the return value in text form ...

+2
source

First create a class:

public class AgeCalculation {

 private int startYear; private int startMonth; private int startDay; private int endYear; private int endMonth; private int endDay; private int resYear; private int resMonth; private int resDay; private Calendar start; private Calendar end; public String getCurrentDate() { end = Calendar.getInstance(); endYear = end.get(Calendar.YEAR); endMonth = end.get(Calendar.MONTH); endMonth++; endDay = end.get(Calendar.DAY_OF_MONTH); return endDay + ":" + endMonth + ":" + endYear; } public void setDateOfBirth(int sYear, int sMonth, int sDay) { startYear = sYear; startMonth = sMonth; startDay = sDay; } public int calcualteYear() { resYear = endYear - startYear; if (endMonth < startMonth){ resYear --; } return resYear; } public int calcualteMonth() { if (endMonth >= startMonth) { resMonth = endMonth - startMonth; } else { resMonth = endMonth - startMonth; resMonth = 12 + resMonth; resYear--; } return resMonth; } public int calcualteDay() { if (endDay >= startDay) { resDay = endDay - startDay; } else { resDay = endDay - startDay; resDay = 30 + resDay; if (resMonth == 0) { resMonth = 11; resYear--; } else { resMonth--; } } return resDay; } public String getResult() { return resDay + ":" + resMonth + ":" + resYear; } public String dob (int sYear, int sMonth, int sDay) { startYear = sYear; startMonth = sMonth; startDay = sDay; return startDay + "/" + startMonth + "/" + startYear; } 

}

then just call this method in your activity

 AgeCalculation age = new AgeCalculation (); age.getCurrentDate(); age.setDateOfBirth(getYear, getMonth, getDate); int calculatedYear = age.calcualteYear(); int calculatedMonth = age.calcualteMonth(); int calculatedDate = age.calcualteDay(); 
0
source

TL; DR

 Period.between( LocalDate.of( Integer.parseInt( … ) , … , … ) , // ( year, month, dayOfMonth ) LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ).getYears() 

More details

You are using the nasty old time and time classes, now obsolete, superseded by the java.time classes.

The LocalDate class represents a date value only without time and without a time zone.

Unlike the old classes, the months have normal numbering, 1-12 for January-December.

 LocalDate localDate = LocalDate.of( Integer.parseInt( … ) , … , … ) ; // year , month , day 

The time zone is critical for determining the date. At any given moment, the date changes around the world by zone. For example, a few minutes after midnight in Paris, France is a new day, still "yesterday" in Montreal Quebec .

Specify the time zone name in continent/region format, such as America/Montreal , Africa/Casablanca or Pacific/Auckland . Never use an abbreviation of 3-4 characters, for example, EST or IST , as they are not real time zones, and are not standardized or even unique (!).

 ZoneId z = ZoneId.of( "America/Montreal" ); LocalDate today = LocalDate.now( z ); 

Representation of the time interval in the details of days-months-years is performed using the Period class.

 Period age = Period.between( localDate , today ); 

To get a string in the standard ISO 8601 format , call age.toString() . Or interrogate for each piece, years, months, days.

 int y = age.getYears(); int m = age.getMonths(); int d = age.getDays(); 

About java.time

The java.time framework is built into Java 8 and later. These classes supersede the nasty old legacy time classes such as java.util.Date , Calendar and SimpleDateFormat .

The Joda-Time project, now in maintenance mode , we recommend switching to the java.time classes.

To learn more, see the Oracle Tutorial . And search for qaru for many examples and explanations. JSR 310 specification .

Where to get java.time classes?

The ThreeTen-Extra project extends java.time with additional classes. This project is proof of possible future additions to java.time. Here you can find useful classes such as Interval , YearWeek , YearQuarter and more .

0
source

Source: https://habr.com/ru/post/958463/


All Articles