Computing Days Between Dates
/* Applet to compute the number of days between any two dates. */ import java.awt.*; import java.applet.Applet; import java.awt.event.*; public class Days extends Applet implements ActionListener { // GUI Widgets TextField month1Text, day1Text, year1Text, month2Text, day2Text, year2Text; Button goButton; // Program variables int month1, month2, day1, day2, year1, year2; int days = 0; boolean valid = false; public void init() { makeGui(); } // init public void paint(Graphics g) { if (valid) { g.drawString("Date1 is "+month1+"/"+day1+"/"+year1, 20, 110); g.drawString("Date2 is "+month2+"/"+day2+"/"+year2, 20, 130); g.drawString("Number of days between them is " + days, 20, 150); } else g.drawString("Please enter valid dates.", 20, 130); } // paint private void compute() { days = 0; // if the two dates are in the same year if (year1 == year2) { // if the two months are the same if (month1 == month2) { days = day2 - day1; } else { // the two months are not equal // add the # of days in month1 days = days + daysInMonth(month1, year1) - day1; // add the number of days in each month from month1+1 .. month2-1 for (int m= month1+1; m < month2; m++) { days = days + daysInMonth(m, year1); } // add # days in month2 days = days + day2; } } else {// the two dates are in different years // #days in year1 // #days in month1 days = days + daysInMonth(month1, year1) - day1; // #days in each month from month1+1..12 for (int m = month1+1; m <= 12; m++) days = days + daysInMonth(m, year1); // #days in each year from year1+1 .. year2-1 for (int y = year1+1; y < year2; y++) { if (leapyear(y)) days = days + 366; else days = days + 365; } // #days in year 2 // #days in each month from 1..month2-1 for (int m = 1; m < month2; m++) days = days + daysInMonth(m, year2); // # days in month2 days = days + day2; } } // compute private int daysInMonth(int m, int y) { // returns the # days in month, m in year y switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (leapyear(y)) return 29; else return 28; } return 0; } // daysInMonth private boolean leapyear(int y) { return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)); } // leapYear private void readDate() { month1 = readValue(month1Text); day1 = readValue(day1Text); year1 = readValue(year1Text); month2 = readValue(month2Text); day2 = readValue(day2Text); year2 = readValue(year2Text); } // readDate private boolean validate (int m, int d, int y) { if ((m < 1) || (m > 12)) return false; if (y < 1900) return false; if ((d <1) || (d > daysInMonth(m, y))) return false; return true; } // validate private int readValue(TextField t) { String s; Integer i; // Get the text in textfield s = t.getText(); // Convert it to Integer object i = new Integer(s); // gets its int value return i.intValue(); } // readValue public void actionPerformed(ActionEvent e) { if (e.getSource()==goButton) { readDate(); valid = validate(month1, day1, year1) && validate(month2, day2, year2); } if (valid) compute(); repaint(); } // actionPerformed private void makeGui() { Panel datePanel, mdy1Panel, mdy2Panel, allPanel, goPanel; Label date1L, m1L, d1L, y1L; Label date2L, m2L, d2L, y2L; setLayout(new BorderLayout()); // Applet has 2 sets of three text fields for entering month/day/year for two dates // Date 1 datePanel = new Panel(); datePanel.setLayout(new GridLayout(2,2)); mdy1Panel = new Panel(); mdy1Panel.setLayout(new GridLayout(2,3)); m1L = new Label("Month"); d1L = new Label("Day"); y1L = new Label("Year"); mdy1Panel.add(m1L); mdy1Panel.add(d1L); mdy1Panel.add(y1L); month1Text = new TextField(2); day1Text = new TextField(2); year1Text = new TextField(4); mdy1Panel.add(month1Text); mdy1Panel.add(day1Text); mdy1Panel.add(year1Text); mdy1Panel.setBackground(Color.orange); // Date2 mdy2Panel = new Panel(); mdy2Panel.setLayout(new GridLayout(2,3)); m2L = new Label("Month"); d2L = new Label("Day"); y2L = new Label("Year"); mdy2Panel.add(m2L); mdy2Panel.add(d2L); mdy2Panel.add(y2L); month2Text = new TextField(2); day2Text = new TextField(2); year2Text = new TextField(4); mdy2Panel.add(month2Text); mdy2Panel.add(day2Text); mdy2Panel.add(year2Text); mdy2Panel.setBackground(Color.magenta); date1L = new Label("Date 1"); Panel date1P = new Panel(); date1P.add(date1L); date1P.setBackground(Color.orange); date2L = new Label("Date 2"); Panel date2P = new Panel(); date2P.add(date2L); date2P.setBackground(Color.magenta); datePanel.add(date1P); datePanel.add(date2P); datePanel.add(mdy1Panel); datePanel.add(mdy2Panel); // applet has a Go Button goButton = new Button("Go"); goPanel = new Panel(); goPanel.add(goButton); goPanel.setBackground(Color.cyan); allPanel = new Panel(); //allPanel.setLayout(new GridLayout(2,1)); allPanel.add(datePanel); //allPanel.add(goPanel); add("South", goPanel); add("North", allPanel); // activate listener for go button goButton.addActionListener(this); } // makeGUI } // Days