我需要获取用户输入的生日(最好是 dd/mm//yyyy
格式)并根据今天的日期找到他们的年龄。有人可以向我解释找到这个的过程吗?我需要以以下格式打印出来:
"You are 19 years, 4 months, 12 days, 8 hours, 44 minutes, and 39 seconds old."
我对如何从另一个日期减去一个日期,以及如何分别引用每个部分(年、月、日、小时等)感到有点困惑。
我目前的代码供引用:
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));
}
}
}
}
最佳答案
我建议使用 Joda time .它是一个比 JDK 中包含的 API 好得多的 API。
创建一个 Instant代表这个人出生的时间,另一个代表当前时间,并使用这两个 Instant
创建一个 Period .从那里可以很容易地使用 methods 获取您需要的字段。在 Period
类中提供。
关于java - 以年、月、日、小时、分钟和秒为单位计算年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710206/