Рассчитать возраст, используя дату рождения

Я разрабатываю приложение для Android, чтобы найти возраст с даты рождения, предоставленный пользователем. Три текста редактирования есть один на день и два других на месяц и год. Я получил код из этой ссылки .. Но я не знаю, что делать дальше … Я даю код до сих пор, я создал … PLS проверить и помочь мне …

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; } } 

Вы должны добавить кнопку прослушивания кликов к своей кнопке, а затем в ней вычислить возраст и отобразить его в своем TextView.

 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; } } 

При нажатии кнопки просто передайте значения из текстовых полей в метод и отобразите возвращаемое значение в textview …

Сначала создайте класс:

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; } 

}

То просто вызовите этот метод в своей деятельности

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

ТЛ; др

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

Детали

Вы используете неприятные старые классы времени, теперь устаревшие, вытесненные классами java.time.

Класс LocalDate представляет собой значение даты только без времени и без часового пояса.

В отличие от старых классов, месяцы имеют нормальную нумерацию, 1-12 за январь-декабрь.

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

Часовой пояс имеет решающее значение для определения даты. В любой данный момент дата изменяется по всему миру по зонам. Например, через несколько минут после полуночи в Париже Франция – новый день, еще «вчера» в Монреале Квебек .

Укажите правильное имя часового пояса в формате continent/region , например, America/Montreal , Africa/Casablanca или Pacific/Auckland . Никогда не используйте аббревиатуру 3-4 букв, такую ​​как EST или IST поскольку они не являются настоящими часовыми поясами, а не стандартизированы и даже не уникальны (!).

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

Представление промежутка времени в деталях дней-месяцев-годов производится с помощью класса Period .

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

Чтобы получить строку в стандартном формате ISO 8601 , вызовите age.toString() . Или допросить за каждую часть, годы, месяцы, дни.

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

О java.time

Рамка java.time встроена в Java 8 и более поздних версий . Эти классы вытесняют неприятные старые устаревшие классы времени, такие как java.util.Date , Calendar и SimpleDateFormat .

Проект Joda-Time , теперь в режиме обслуживания , советует перейти на классы java.time .

Дополнительную информацию можно найти в учебнике Oracle . И поиск Stack Overflow для многих примеров и объяснений. Спецификация – JSR 310 .

Где получить классы java.time?

  • Java SE 8 , Java SE 9 и более поздние версии
    • Встроенный.
    • Часть стандартного Java API с интегрированной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональных возможностей java.time портирована на Java 6 и 7 в ThreeTen-Backport .
  • Android
    • Проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше) специально для Android.
    • См. Как использовать ThreeTenABP ….

Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval , YearWeek , YearQuarter и т . Д.