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 :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 - How to calculate an age in years, months and days in Java? |
Note : You can also validate your result using age calculator.
Similar Problems :
- Write a program in Java that calculates work anniversary.
- 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.
How to calculate age in year, month and days in Java?
Reviewed by Rohit Agarwal
on
12/26/2016
Rating:

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.