/* AgeNowApplet: Dispays a person's age on the current date as a string. The person's month, day and year of birth must be passed as parameters. For example, html to invoke this applet might read: */ import java.awt.Font; import java.util.Date; import java.awt.Graphics; public class AgeNowApplet extends java.applet.Applet { Font myFont = new Font("TimesRoman",Font.BOLD,12); Date dateNow = new Date(); int byear,bmonth,bday,yearsOld,monthsOld,daysOld; int year,month,day; public void init(){ try { String by = getParameter("birthYear"); if(by == null) byear = 1970; else byear = Integer.parseInt(by); } catch (NumberFormatException m){ byear = 1970;} try { String bm = getParameter("birthMonth"); if(bm == null) bmonth = 1; else bmonth = Integer.parseInt(bm); } catch (NumberFormatException m) { bmonth = 1;} try { String bd = getParameter("birthDay"); if(bd == null) bday = 1; else bday = Integer.parseInt(bd); } catch (NumberFormatException m) { bday = 1;} // extract month day and year from date now year = dateNow.getYear() + 1900; month = dateNow.getMonth()+1; day = dateNow.getDate(); // Compute: case later in year than birthday first. if(month > bmonth || (month == bmonth && day >= bday)){ yearsOld = year - byear; monthsOld = month - bmonth -1; if(monthsOld >= 0) daysOld = day + (MonthLength(bmonth,year) - bday); else daysOld = day - bday; } else { // earlier in year than birthday yearsOld = year - byear -1; monthsOld = month - bmonth + 11; daysOld = day + (MonthLength(bmonth,year-1) - bday); } } public int MonthLength(int monthnumber, int year) { int MonthLengths[] = { 31, // 30 days, 28, // hath September, 31, // April, 30, // June, 31, // and November. 30, // All the rest 31, // have 31 31, // (excepting February, 30, // alone.) 31, 30, 31}; if(!isLeapYear(year)) return MonthLengths[monthnumber-1]; if(month != 2) return MonthLengths[monthnumber-1]; return 29; } public boolean isLeapYear(int year) { // Is this geek code, or what ? if(year % 4 != 0) return false; if(year % 100 != 0) return true; if(year % 400 == 0) return true; // exception to century rule. return false; // generally, centuries are not leap years. } public void paint(Graphics g) { g.setFont(myFont); g.drawString(Integer.toString(yearsOld) + " years, " + Integer.toString(monthsOld) + " months, and " + Integer.toString(daysOld) + " days ",10,15); } }