java - 以年、月、日、小时、分钟和秒为单位计算年龄

标签 java date

我需要获取用户输入的生日(最好是 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/

相关文章:

java - 如何确定给定单词是否位于其他两个单词之间?

Java 8 方法引用

java - 我在 java 和 mysql 连接中遇到错误..它与 java 和 mysql 中的日期比较有关

javascript - 在 Chrome 中通过 "new Date()"在 javascript 中创建日期对象不正确

php - 基于数字的第一个下一个和第一个最后一个

java - 使用 Mockito 测试涉及数据库调用的 Rest API

java - 当查询结果不是类时,JPA 查询方法的返回类型是什么?

android - 从 GregorianCalendar 获取星期几

javascript - 如何使用httpresponse将html中的值返回到android java类中

mysql - MySQL 中的简单 STR_TO_DATE 问题