How to calculate age in year, month and days in Java?



Problem Description :


Write a program in Java that calculates an age of the person.

Concept :


For doing this calculation we are using Java 8 API methods that are very simple and straightforward.

Algorithm :


  • Convert both the dates to LocalDates.
  • Pass both LocalDates to between() method of Period class that is present in java.time.* package.
  • Use getYears(), getMonths() and getDays() methods of Period class to print years, month and days respectively.

Recommended :



Note : Java 8 is required to run below code because we are using Java 8 API methods.

Java Program :


package com.javamultiplex.datetime;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.Date;
import java.util.Scanner;

/**
 * 
 * @author Rohit Agarwal
 * @category Date and Time
 * @problem How to calculate age?
 *
 */
public class CalculateAge {

 public static void main(String[] args) {

  Scanner input = null;
  try {
   input = new Scanner(System.in);
   System.out.println("Enter your DOB in dd/MM/yyyy format :");
   String dob = input.next();
   Date current = new Date();
   // If Date is valid, converting String to date.
   Date mydob = getValidDate(dob);
   if (mydob != null && mydob.before(current)) {

    // Get default Time zone Id.
    ZoneId defaultZoneId = ZoneId.systemDefault();

    // Convert Date mydob to LocalDate
    Instant instant1 = mydob.toInstant();
    LocalDate localeDateMyDob = instant1.atZone(defaultZoneId).toLocalDate();
    // Convert Date current to LocalDate
    Instant instant2 = current.toInstant();
    LocalDate localeDateCurrent = instant2.atZone(defaultZoneId).toLocalDate();

    Period period = Period.between(localeDateMyDob, localeDateCurrent);
    System.out.println("Age : " + period.getYears() + " Years " + period.getMonths() + " Months "
      + period.getDays() + " Days");

   } else {
    System.out.println("DOB is invalid.");
   }
  } finally {
   if (input != null) {
    input.close();
   }
  }

 }

 private static Date getValidDate(String date) {

  Date mydate = null;
  if (isValidDateFormat(date)) {
   /**
    * d -> Day of month M -> Month of year y -> Year
    */
   DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
   /**
    * By default setLenient() is true. We should make it false for
    * strict date validations.
    * 
    * If setLenient() is true - It accepts all dates. If setLenient()
    * is false - It accepts only valid dates.
    */
   dateFormat.setLenient(false);
   try {
    mydate = dateFormat.parse(date);
   } catch (ParseException e) {
    mydate = null;
   }
  }
  return mydate;
 }

 private static boolean isValidDateFormat(String date) {

  /**
   * Regular Expression that matches String with format dd/MM/yyyy. 
   * dd -> 01-31 
   * MM -> 01-12 
   * yyyy -> 4 digit number
   */
  String pattern = "(0?[1-9]|[12][0-9]|3[01])\\/(0?[1-9]|1[0-2])\\/([0-9]{4})";
  boolean result = false;
  if (date.matches(pattern)) {
   result = true;
  }
  return result;
 }

}


Output :


Output of Java program that calculates an age in years, months and days.
Output - How to calculate an age in years, months and days in Java?

Note :  You can also validate your result using age calculator.


Similar Problems :


  1. Write a program in Java that calculates work anniversary.
  2. Write a program in Java that calculates marriage anniversary.
Solution of both the problems is same as above.

References :



Thank you friends, I hope you have clearly understood the solution of this problem. If you have any doubt, suggestion or query please feel free to comment below. You can also discuss this solution in our forum.

Tags : Date and Time problems, Age in years, months and days in Java, Solution in Java,  ZoneId, Instant, LocalDate, Period, if else statement, DateFormat, SimpleDateFormat, String, Regular expressions.

About Author:

I am simple guy with lot of ambitions. My main motive is to share whatever knowledge I have related to programming. With me you can easily learn how to solve any programming problem in Java.You can connect with me on social networking sites also.


Let's Get Connected: Linkedin | Facebook |

How to calculate age in year, month and days in Java? How to calculate age in year, month and days in Java? Reviewed by Rohit Agarwal on 12/26/2016 Rating: 5

No comments:

Please provide your valuable comments. If you have any suggestion please share with me I will work on it and if you have any question or doubt please ask, don't hesitate. I am your friend, i will clarify all your doubts.

Powered by Blogger.