Hello geeks, today we are going to make an application to calculate Age or time period between two dates. By making this application one can calculate his/her exact age, also one can calculate the exact difference between two dates.
Prerequisites:
Before making this application, you can go through the article Program to calculate age to have a better understanding of the concepts used in this application.
What we are going to build in this article?
In this application, we will be using two DatePickers, where user can select the date no. 1 and 2 respectively. A Button is used to perform the calculation part and show the result in a TextView named as result. Note that we are going to implement this application using Java language. A sample video is given below to get an idea about what we are going to do in this article.
Step by Step Implementation
Step 1: Creating a new project
- Open a new project.
- We will be working on Empty Activity with language as Java. Leave all other options unchanged.
- You can change the name of the project at your convenience.
- There will be two default files named activity_main.xml and MainActivity.java.
If you don’t know how to create a new project in Android Studio then you can refer to How to Create/Start a New Project in Android Studio?
Step 2: Navigate to Build scripts > build.gradle(module) file and add the following dependency to it
implementation 'joda-time:joda-time:2.9.1'
Step 3: Working with the activity_main.xml file
Here we will design the user interface of our application. We will be using the following components for their respective works:
- Button 1: to pick the first date user wants to enter.
- Button 2: to pick the second date user wants to enter.
- Button 3: to perform the calculation
- TextView: to show the final output(age).
Navigate to the app > res > layout > activity_main.xml and add the below code to that file.
XML
<? xml version = "1.0" encoding = "utf-8" ?> <!-- Parent layout as linear layout--> < LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:gravity = "center" android:orientation = "vertical" android:padding = "10dp" tools:context = ".MainActivity" > <!-- linear layout to show datepickers--> < LinearLayout android:layout_width = "match_parent" android:layout_height = "wrap_content" > <!-- to select the first date--> < Button android:id = "@+id/bt_birth" android:layout_width = "150dp" android:layout_height = "50dp" android:background = "@android:color/transparent" android:drawableRight = "@drawable/ic_baseline" android:text = "01/01/2021" android:textColor = "@color/black" android:textSize = "13sp" /> <!-- displaying message as "to"--> < TextView android:layout_width = "100dp" android:layout_height = "50dp" android:gravity = "center_horizontal" android:text = "To" android:textColor = "@color/black" android:textSize = "20sp" android:textStyle = "bold" /> <!-- to display date number 2--> < Button android:id = "@+id/bt_today" android:layout_width = "145dp" android:layout_height = "50dp" android:background = "@android:color/transparent" android:drawableRight = "@drawable/ic_baseline" android:textColor = "@color/black" android:textSize = "13sp" /> </ LinearLayout > <!-- to perform the calculation--> < Button android:id = "@+id/btn_calculate" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginTop = "10dp" android:text = "calculate" /> <!-- to display the message "Result"--> < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginTop = "50dp" android:text = "Result" android:textColor = "@android:color/holo_blue_bright" android:textSize = "30sp" android:textStyle = "bold" /> <!-- To show the final output(age)--> < TextView android:id = "@+id/tv_result" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginTop = "10dp" android:text = "0 Years | 0 Months | 0 Days" android:textSize = "25sp" android:textStyle = "bold" /> </ LinearLayout > |
After implementing the above code, the design of the activity_main.xml file looks like this.
Step 4: Working with MainActivity.java file
In MainActivity.java file onClickListener is used on buttons to pick the date and to perform the calculation. Use the following code in the MainActivity.java file.
Java
import android.app.DatePickerDialog; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import org.joda.time.Period; import org.joda.time.PeriodType; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class MainActivity extends AppCompatActivity { // initializing variables Button btn_birth, btn_today, btn_calculate; TextView tvResult; DatePickerDialog.OnDateSetListener dateSetListener1, dateSetListener2; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); // assign variables btn_birth = findViewById(R.id.bt_birth); btn_today = findViewById(R.id.bt_today); btn_calculate = findViewById(R.id.btn_calculate); tvResult = findViewById(R.id.tv_result); // calendar format is imported to pick date Calendar calendar = Calendar.getInstance(); // for year int year = calendar.get(Calendar.YEAR); // for month int month = calendar.get(Calendar.MONTH); // for date int day = calendar.get(Calendar.DAY_OF_MONTH); SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "dd/MM/yyyy" ); // to set the current date as by default String date = simpleDateFormat.format(Calendar.getInstance().getTime()); btn_today.setText(date); // action to be performed when button 1 is clicked btn_birth.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { // date picker dialog is used // and its style and color are also passed DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity. this , android.R.style.Theme_Holo_Light_Dialog_MinWidth, dateSetListener1, year, month, day ); // to set background for datepicker datePickerDialog.getWindow().setBackgroundDrawable( new ColorDrawable(Color.TRANSPARENT)); datePickerDialog.show(); } }); // it is used to set the date which user selects dateSetListener1 = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int day) { // here month+1 is used so that // actual month number can be displayed // otherwise it starts from 0 and it shows // 1 number less for every month // example- for january month=0 month = month + 1 ; String date = day + "/" + month + "/" + year; btn_birth.setText(date); } }; // action to be performed when button 2 is clicked btn_today.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { // date picker dialog is used // and its style and color are also passed DatePickerDialog datePickerDialog = new DatePickerDialog(MainActivity. this , android.R.style.Theme_Holo_Light_Dialog_MinWidth, dateSetListener2, year, month, day ); // to set background for datepicker datePickerDialog.getWindow().setBackgroundDrawable( new ColorDrawable(Color.TRANSPARENT)); datePickerDialog.show(); } }); // it is used to set the date which user selects dateSetListener2 = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int month, int day) { // here month+1 is used so that // actual month number can be displayed // otherwise it starts from 0 and it shows // 1 number less for every month // example- for january month=0 month = month + 1 ; String date = day + "/" + month + "/" + year; btn_today.setText(date); } }; // action to be performed when calculate button is clicked btn_calculate.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { // converting the inputted date to string String sDate = btn_birth.getText().toString(); String eDate = btn_today.getText().toString(); SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat( "dd/MM/yyyy" ); try { // converting it to date format Date date1 = simpleDateFormat1.parse(sDate); Date date2 = simpleDateFormat1.parse(eDate); long startdate = date1.getTime(); long endDate = date2.getTime(); // condition if (startdate <= endDate) { org.joda.time.Period period = new Period(startdate, endDate, PeriodType.yearMonthDay()); int years = period.getYears(); int months = period.getMonths(); int days = period.getDays(); // show the final output tvResult.setText(years + " Years |" + months + "Months |" + days + "Days" ); } else { // show message Toast.makeText(MainActivity. this , "BirthDate should not be larger than today's date!" , Toast.LENGTH_SHORT).show(); } } catch (ParseException e) { e.printStackTrace(); } } }); } } |
Congratulations! we have successfully the application to calculate the age or difference between two dates. Here is the final output of our application.
Output: