JAVA 中的程序根据出生日期和当前日期计算人的年龄
Program in JAVA to calculate age of person from birthdate and current date
此代码将从用户那里接受当前日期、月份和年份;以及他们的出生日期、出生月份、出生年份。它以年、月和日为单位输出人的年龄。我编写的代码完成了它的工作。我已经与互联网上的网站进行了交叉核对。我想知道:
How do I implement the Date class in Java to get the current Date, Month and Year?
Will I be better off with Swing or AWT kits, if I want to make a GUI?
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.util.Date 或 java.sql.Date classes。多年前,它们被 JSR 310 中定义的现代 java.time classes 所取代。
对于没有时间和时区的仅日期值,使用 LocalDate
。
LocalDate birthDate = LocalDate.of(y, m, d);
对于经过的时间或年龄,使用 Period
class。
LocalDate today = LocalDate.now();
Period age = Period.between(birthDate, today);
long years = age.getYears();
时间计算是棘手的野兽,最好避免实施自定义 Date/Time 类(除非出于锻炼或学习目的)。至于你的问题,用Java 8's 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 部分 - "a bit" 过于宽泛 :-) 作为一般建议 - 了解 JavaFX,以及如何在其中构建 UI,如果您愿意的话使用 Java 作为 GUI 应用程序的工具包。
编辑:关于代码样式和约定的旁注 - Java 有一个完善的方法和变量命名约定 - 学习和使用它们始终是一个好习惯。对于那些熟悉约定的人来说,它使您的代码更具可读性。
此代码将从用户那里接受当前日期、月份和年份;以及他们的出生日期、出生月份、出生年份。它以年、月和日为单位输出人的年龄。我编写的代码完成了它的工作。我已经与互联网上的网站进行了交叉核对。我想知道:
How do I implement the Date class in Java to get the current Date, Month and Year? Will I be better off with Swing or AWT kits, if I want to make a GUI?
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.util.Date 或 java.sql.Date classes。多年前,它们被 JSR 310 中定义的现代 java.time classes 所取代。
对于没有时间和时区的仅日期值,使用 LocalDate
。
LocalDate birthDate = LocalDate.of(y, m, d);
对于经过的时间或年龄,使用 Period
class。
LocalDate today = LocalDate.now();
Period age = Period.between(birthDate, today);
long years = age.getYears();
时间计算是棘手的野兽,最好避免实施自定义 Date/Time 类(除非出于锻炼或学习目的)。至于你的问题,用Java 8's 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 部分 - "a bit" 过于宽泛 :-) 作为一般建议 - 了解 JavaFX,以及如何在其中构建 UI,如果您愿意的话使用 Java 作为 GUI 应用程序的工具包。
编辑:关于代码样式和约定的旁注 - Java 有一个完善的方法和变量命名约定 - 学习和使用它们始终是一个好习惯。对于那些熟悉约定的人来说,它使您的代码更具可读性。