【问题标题】:Program in JAVA to calculate age of person from birthdate and current dateJAVA程序从出生日期和当前日期计算人的年龄
【发布时间】:2019-12-07 05:11:32
【问题描述】:

此代码将接受用户的当前日期、月份和年份;以及他们的出生日期、出生月份、出生年份。它以年、月和日为单位输出人的年龄。我编写的代码完成了它的工作。我已经与互联网上的一个网站进行了交叉检查。我想知道:

如何在 Java 中实现 Date 类来获取当前的日期、月份和年份? 如果我想制作 GUI,使用 Swing 或 AWT 套件会更好吗?

import java.util.*;
class AgeCalc
{
    static int[] MonthDays = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    public static void Input(int cd, int cm, int cy)
    {
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter Birth Date");
        int bd = scan.nextShort();
        System.out.println("Enter Birth Month");
        int bm = scan.nextShort();
        System.out.println("Enter Birth Year");
        int by = scan.nextShort();
        int fnd = (DaysofMidYears(by, cy)) + Birth_CurrYearDays(bd, bm, by, cd, cm, cy);
        int y = fnd / 365;
        int m = (fnd - (y * 365)) / 30;
        int d = (fnd - (y * 365) - (m * 30));
        System.out.println("No. of Days: "+d);
        System.out.println("No. of Months: "+m);
        System.out.println("No. of Years: "+y);
    }
    public static boolean LeapYearTest(int y)
    {
        boolean lys = 
        ( ((y % 400) == 0) ? true 
        : ((y % 10) == 0) ? false 
        : ((y % 4) == 0) ? true 
        : false );
        return lys;
    }
    public static int DaysofMidYears(int by, int cy)
    {
        int dmy = 0;
        for
        (int i = (by + 1); i <= (cy - 1); i++)
        {
            dmy += 365;
            if 
            ((LeapYearTest(i)) == true)
            {
                dmy += 1;
            }
        }
        return dmy;
    }
    public static int InitialDaysofYear(int d, int m, int y)
    {
        int id = d;
        for
        (int i = 1; i <= (m - 1); i++)
        {
            id += (MonthDays[i - 1]);
        }
        if
        (((LeapYearTest(y)) == true) && (m > 2))
        {
            id += 1;
        }
        return id;
    }
    public static int Birth_CurrYearDays(int bd, int bm, int by, int cd, int cm, int cy)
    {
        int bcyd = 0;
        bcyd += (InitialDaysofYear(cd, cm, cy));
        bcyd += (365 - (InitialDaysofYear(bd, bm, by)));
        if
        ((LeapYearTest(by)) == true)
        {
            bcyd += 1;
        }
        return bcyd;
    }
}

【问题讨论】:

  • 如何在Java中实现Date类来获取当前的Date、Month和Year?你需要自己编写类java.util.Date的实现吗?跨度>
  • 我如何让它成为一个 GUI? 你需要用 java 写一个 GUI?如果是,那么您有SwingJavaFX
  • 欢迎来到 Stack Overflow。对于 Stack Overflow 问题,如何制作 GUI 太宽泛了。幸运的是,已经有很多关于该主题的教程。使用您的搜索引擎。
  • 这看起来像是一个错字:(y % 10) == 0。应该是y % 100?这样的错字很好地说明了为什么使用经过验证的标准库比为任务编写自己的逻辑更好。
  • 这能回答你的问题吗? How do I calculate someone's age in Java? 如果没有,请搜索其他存在的问题。很可能不止一个。

标签: java calculator period date


【解决方案1】:

我们不再使用 java.util.Datejava.sql.Date 类。它们在几年前被 JSR 310 中定义的现代 java.time 类所取代。

对于没有时间和时区的仅日期值,请使用LocalDate

LocalDate birthDate = LocalDate.of(y, m, d);

对于经过的时间或年龄,请使用Period 类。

LocalDate today = LocalDate.now();
Period age = Period.between(birthDate, today);
long years = age.getYears();

【讨论】:

    【解决方案2】:

    时间计算很棘手,最好避免实现自定义日期/时间类(可能出于锻炼或学习目的除外)。至于您的问题,请使用 Java 8 的 java.time.* 类:

    ZoneId timeZoneId = ZoneId.of("Europe/Warsaw"); // assuming you're in Poland - put the your time zone name here ;-)
    LocalDate today = LocalDate.now(timeZoneId);
    LocalDate birthday = LocalDate.of(year, month, day);
    Period lifePeriod = Period.between(birthday, today);
    long age = lifePeriod.getYears();
    

    至于您问题的 GUI 部分 - 它“有点”太宽泛了 :-) 作为一般建议 - 如果您想使用 Java 作为 GUI 工具包,请了解 JavaFX,以及如何在其中构建 UI应用程序。

    编辑:关于代码样式和约定的旁注——Java 有一个完善的方法和变量命名约定——学习和使用它们始终是一个好习惯。它使您的代码对于那些熟悉约定的人来说更具可读性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-13
      • 2014-05-30
      • 1970-01-01
      • 2020-06-01
      • 2019-03-09
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多