I need to take a birthday entered by the user (preferably in dd/mm//yyyy
format) and find their age, based on todays date. Could someone explain to me the process I should go through to find this? I need to print it out in the format:
"You are 19 years, 4 months, 12 days, 8 hours, 44 minutes, and 39 seconds old."
I'm just a little confused on how I would subtract a date from another date, and how I would reference each part (years, months, days, hours, etc) separately.
The code I have at the moment for reference:
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Scanner;
public class Driver {
public Driver(){}
public static void main( String[] args){
Driver menu = new Driver();
MenuOptions option;
do{
menu.displayMenu();
option = menu.getResponse();
menu.runOption(option);
}while(option != MenuOptions.Quit);
}
private enum MenuOptions{
AgeCalc("Calculate your age"),
AnniversaryCalc("Calculate time until specified date"),
AgeDifference("Find the time between two specified dates"),
Quit("Exit the program");
private String value;
private MenuOptions(String value){
this.value = value;
}
public String toString(){
return value;
}
}
public void displayMenu(){
for(MenuOptions option : MenuOptions.values()){
System.out.printf("%5d: %s\n", option.ordinal()+1, option);
}
}
public MenuOptions getResponse(){
int value = -1;
Scanner input = new Scanner(System.in);
do{
System.out.println("> ");
String response = input.nextLine();
if(response.matches("\\d+")){
value = Integer.parseInt(response);
if(value < 1 || value > MenuOptions.values().length){
value = -1;
System.out.println("Unknown response, please enter a number between 1 and " +MenuOptions .values().length);
}
}
}while(value <=0);
return MenuOptions.values()[value-1];
}
public void runOption(MenuOptions option){
Scanner in = new Scanner(System.in);
switch(option){
case AgeCalc:
System.out.println("Please enter your birthday mm/DD/yyyy).");
System.out.println(">");
DateFormat df = new SimpleDateFormat("mm/DD/yyyy");
try
{
java.util.Date birthday = df.parse(in.nextLine());
System.out.println("Today = " + df.format(birthday));
} catch (ParseException e)
{
e.printStackTrace();
}
Calendar today = Calendar.getInstance();
java.util.Date today = df.format();
DateFormat simple = new SimpleDateFormat("dd/MM/yyyy");
String birthdate = simple.format(in.nextLine());
Date.parse(birthdate);
System.out.println(birthdate.toString());
break;
case AnniversaryCalc:
System.out.printf("PI: %.20f\n", Math.PI);
break;
case AgeDifference:
for(int p=0; p <= 32; p++){
System.out.println("2^" +p+" = " +Math.pow(2,p));
}
}
}
}
I'd suggest using Joda time. It's a much better API than what's included in the JDK.
Create an Instant representing when the person was born, another representing the current time, and use those two Instant
s to create a Period. From there it's easy to get the fields you need using the methods provided in the Period
class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With