// Person.java -- demonstrate methods in class and calendar import java.util.Calendar; // Should convert to java.time.* import java.text.ParseException; import java.text.SimpleDateFormat; public final class Person { // shared constants, procedures, ... private static final SimpleDateFormat DMY = new SimpleDateFormat ("dd MMM yyyy"); // instance variables final String name; private final Calendar dob; // Java Date, Calendar are ugly and mutable! // constructor of class "Person" Person (final String name, final Calendar dob) { this.name = name; this.dob = dob; } Person (final String name, final String dob) throws ParseException { this (name, Person.date(dob)); } // method of class "Person" int age () { final Calendar today = Calendar.getInstance(); final int diff = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR); final int thisDay = today.get(Calendar.DAY_OF_YEAR); final int dobDay = dob.get(Calendar.DAY_OF_YEAR); return thisDay > dobDay ? diff : diff-1; } public static Calendar date (final String x) throws ParseException { final Calendar r = Calendar.getInstance(); r.setTime (DMY.parse (x)); return r; } public static void main (final String [] args) throws ParseException { final String f = "Age is %s%n"; final Person p = new Person ("William H. Gates", "28 Oct 1955"); System.out.format (f, p.age()); final Person g = new Person ("Gösta Mittag-Leffler", "16 Mar 1846"); System.out.format (f, g.age()); final Person a = new Person ("Howard Aiken", "14 Mar 1900"); System.out.format (f, a.age()); } }