<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Computer_Science%2F61b%2FHomework%2Fhw2%2FDate.java</id>
	<title>Computer Science/61b/Homework/hw2/Date.java - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.lensovet.net/~sysadmin/w/index.php?action=history&amp;feed=atom&amp;title=Computer_Science%2F61b%2FHomework%2Fhw2%2FDate.java"/>
	<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;action=history"/>
	<updated>2026-05-03T04:31:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=24301&amp;oldid=prev</id>
		<title>Lensovet: Lensovet moved page CS/61b/Homework/hw2/Date.java to Computer Science/61b/Homework/hw2/Date.java</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=24301&amp;oldid=prev"/>
		<updated>2023-02-20T03:51:34Z</updated>

		<summary type="html">&lt;p&gt;Lensovet moved page &lt;a href=&quot;/~sysadmin/w/CS/61b/Homework/hw2/Date.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS/61b/Homework/hw2/Date.java&quot;&gt;CS/61b/Homework/hw2/Date.java&lt;/a&gt; to &lt;a href=&quot;/~sysadmin/w/Computer_Science/61b/Homework/hw2/Date.java&quot; title=&quot;Computer Science/61b/Homework/hw2/Date.java&quot;&gt;Computer Science/61b/Homework/hw2/Date.java&lt;/a&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 03:51, 20 February 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=3989&amp;oldid=prev</id>
		<title>Lensovet: moved CS 61b/Homework/hw2/Date.java to CS/61b/Homework/hw2/Date.java:&amp;#32;fix cs 61b hierarchy</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=3989&amp;oldid=prev"/>
		<updated>2010-11-14T06:00:19Z</updated>

		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/~sysadmin/w/CS_61b/Homework/hw2/Date.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS 61b/Homework/hw2/Date.java&quot;&gt;CS 61b/Homework/hw2/Date.java&lt;/a&gt; to &lt;a href=&quot;/~sysadmin/w/CS/61b/Homework/hw2/Date.java&quot; class=&quot;mw-redirect&quot; title=&quot;CS/61b/Homework/hw2/Date.java&quot;&gt;CS/61b/Homework/hw2/Date.java&lt;/a&gt;: fix cs 61b hierarchy&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 06:00, 14 November 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
	<entry>
		<id>http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=2964&amp;oldid=prev</id>
		<title>Lensovet at 19:52, 22 May 2007</title>
		<link rel="alternate" type="text/html" href="http://www.lensovet.net/~sysadmin/w/index.php?title=Computer_Science/61b/Homework/hw2/Date.java&amp;diff=2964&amp;oldid=prev"/>
		<updated>2007-05-22T19:52:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{code}}&lt;br /&gt;
 /* Date.java */&lt;br /&gt;
 &lt;br /&gt;
 import java.io.*;&lt;br /&gt;
 &lt;br /&gt;
 class Date {&lt;br /&gt;
 &lt;br /&gt;
   /* Put your private data fields here. */&lt;br /&gt;
 	private int month;&lt;br /&gt;
 	private int day;&lt;br /&gt;
 	private int year;&lt;br /&gt;
   /** Constructs a date with the given month, day and year.   If the date is&lt;br /&gt;
    *  not valid, the entire program will halt with an error message.&lt;br /&gt;
    *  @param month is a month, numbered in the range 1...12.&lt;br /&gt;
    *  @param day is between 1 and the number of days in the given month.&lt;br /&gt;
    *  @param year is the year in question, with no digits omitted.&lt;br /&gt;
    */&lt;br /&gt;
   public Date(int month, int day, int year) {&lt;br /&gt;
 	if (isValidDate(month, day, year)) {&lt;br /&gt;
 	  this.month = month;&lt;br /&gt;
 	  this.day = day;&lt;br /&gt;
 	  this.year = year;&lt;br /&gt;
 	} else {&lt;br /&gt;
 	  System.out.println(&amp;quot;You have entered in invalid date&amp;quot;);&lt;br /&gt;
 	  System.exit(0); }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Constructs a Date object corresponding to the given string.&lt;br /&gt;
    *  @param s should be a string of the form &amp;quot;month/day/year&amp;quot; where month must&lt;br /&gt;
    *  be one or two digits, day must be one or two digits, and year must be&lt;br /&gt;
    *  between 1 and 4 digits.  If s does not match these requirements or is not&lt;br /&gt;
    *  a valid date, the program halts with an error message.&lt;br /&gt;
    */&lt;br /&gt;
   public Date(String s) {&lt;br /&gt;
  	int[] datearray = new int[3];&lt;br /&gt;
  	for (int i=0; i&amp;lt;3; i++)&lt;br /&gt;
   		{ datearray[i] = Integer.parseInt(s.split(&amp;quot;/&amp;quot;, 3)[i]); }&lt;br /&gt;
 	if (isValidDate(datearray[0], datearray[1], datearray[2])) {&lt;br /&gt;
 	  this.month = datearray[0];&lt;br /&gt;
 	  this.day = datearray[1];&lt;br /&gt;
 	  this.year = datearray[2];&lt;br /&gt;
 	} else {&lt;br /&gt;
 	  System.out.println(&amp;quot;You have entered in invalid date&amp;quot;);&lt;br /&gt;
 	  System.exit(0); }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
   /** Checks whether the given year is a leap year.&lt;br /&gt;
    *  @return true if and only if the input year is a leap year.&lt;br /&gt;
    */&lt;br /&gt;
   public static boolean isLeapYear(int year) {&lt;br /&gt;
     if (year%400 != 0 &amp;amp;&amp;amp; year%4 == 0) { return true; }&lt;br /&gt;
     else { return false; }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Returns the number of days in a given month.&lt;br /&gt;
    *  @param month is a month, numbered in the range 1...12.&lt;br /&gt;
    *  @param year is the year in question, with no digits omitted.&lt;br /&gt;
    *  @return the number of days in the given month.&lt;br /&gt;
    */&lt;br /&gt;
   public static int daysInMonth(int month, int year) {&lt;br /&gt;
     if (isLeapYear(year) &amp;amp;&amp;amp; month == 2) { return 29; }&lt;br /&gt;
     switch (month) {&lt;br /&gt;
       case 1: return 31;&lt;br /&gt;
       case 2: return 28;&lt;br /&gt;
       case 3: return 31;&lt;br /&gt;
       case 4: return 30;&lt;br /&gt;
       case 5: return 31;&lt;br /&gt;
       case 6: return 30;&lt;br /&gt;
       case 7: return 31;&lt;br /&gt;
       case 8: return 31;&lt;br /&gt;
       case 9: return 30;&lt;br /&gt;
       case 10: return 31;&lt;br /&gt;
       case 11: return 30;&lt;br /&gt;
       case 12: return 31;&lt;br /&gt;
       // default: System.out.println(&amp;quot;Invalid month&amp;quot;);&lt;br /&gt;
       }&lt;br /&gt;
       return 0;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Checks whether the given date is valid.&lt;br /&gt;
    *  @return true if and only if month/day/year constitute a valid date.&lt;br /&gt;
    *&lt;br /&gt;
    *  Years prior to A.D. 1 are NOT valid.&lt;br /&gt;
    */&lt;br /&gt;
   public static boolean isValidDate(int month, int day, int year) {&lt;br /&gt;
     if (month&amp;gt;12 || month &amp;lt;1 || day&amp;lt;1 || day&amp;gt;daysInMonth(month, year) || year&amp;lt;1) { return false; }&lt;br /&gt;
     else { return true; }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Returns a string representation of this date in the form month/day/year.&lt;br /&gt;
    *  The month, day, and year are printed in full as integers; for example,&lt;br /&gt;
    *  12/7/2006 or 3/21/407.&lt;br /&gt;
    *  @return a String representation of this date.&lt;br /&gt;
    */&lt;br /&gt;
   public String toString() {&lt;br /&gt;
     return (this.month + &amp;quot;/&amp;quot; + this.day + &amp;quot;/&amp;quot; + this.year);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Determines whether this Date is before the Date d.&lt;br /&gt;
    *  @return true if and only if this Date is before d. &lt;br /&gt;
    */&lt;br /&gt;
   public boolean isBefore(Date d) {&lt;br /&gt;
 	if((this.dayInYear() &amp;lt; d.dayInYear() &amp;amp;&amp;amp; this.year == d.year) || this.year &amp;lt; d.year) { return true; }&lt;br /&gt;
 //	if (this.dayInYear() &amp;gt; d.dayInYear() || this.dayInYear() == d.dayInYear() || this.year &amp;gt; d.year) { return false; }&lt;br /&gt;
 	else { return false; }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Determines whether this Date is after the Date d.&lt;br /&gt;
    *  @return true if and only if this Date is after d. &lt;br /&gt;
    */&lt;br /&gt;
   public boolean isAfter(Date d) {&lt;br /&gt;
 	return d.isBefore(this);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   /** Returns the number of this Date in the year.&lt;br /&gt;
    *  @return a number n in the range 1...366, inclusive, such that this Date&lt;br /&gt;
    *  is the nth day of its year.  (366 is only used for December 31 in a leap&lt;br /&gt;
    *  year.)&lt;br /&gt;
    */&lt;br /&gt;
   public int dayInYear() {&lt;br /&gt;
   	int noOfdays = 0;&lt;br /&gt;
 	for (int tmonth = 1; month&amp;gt;tmonth; tmonth++) {&lt;br /&gt;
 	    noOfdays = noOfdays + daysInMonth(tmonth, this.year); }&lt;br /&gt;
 	noOfdays = noOfdays + this.day;&lt;br /&gt;
 	return noOfdays; }&lt;br /&gt;
 &lt;br /&gt;
   /** Determines the difference in days between d and this Date.  For example,&lt;br /&gt;
    *  if this Date is 12/15/1997 and d is 12/14/1997, the difference is 1.&lt;br /&gt;
    *  If this Date occurs before d, the result is negative.&lt;br /&gt;
    *  @return the difference in days between d and this date.&lt;br /&gt;
    */&lt;br /&gt;
   public int difference(Date d) {&lt;br /&gt;
     if (this.year == d.year) { return d.dayInYear() - this.dayInYear(); }&lt;br /&gt;
     else if (this.year &amp;lt; d.year) {&lt;br /&gt;
     	int days = 0;&lt;br /&gt;
     	for (int start = this.year+1; start&amp;lt;d.year; start++) {&lt;br /&gt;
     		days = days + new Date(12, 31, start).dayInYear(); }&lt;br /&gt;
     	return (-1 * (d.dayInYear() + new Date(12,31,this.year).dayInYear() - this.dayInYear() + days)); }&lt;br /&gt;
     else { &lt;br /&gt;
     	int days = 0;&lt;br /&gt;
     	for (int start = d.year+1; start&amp;lt;this.year; start++) {&lt;br /&gt;
     		days = days + new Date(12, 31, start).dayInYear(); }&lt;br /&gt;
     	return this.dayInYear() + new Date(12,31,d.year).dayInYear() - d.dayInYear() + days; }&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   public static void main(String[] argv) {&lt;br /&gt;
     System.out.println(&amp;quot;\nTesting constructors.&amp;quot;);&lt;br /&gt;
     Date d1 = new Date(1, 1, 1);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 1/1/1: &amp;quot; + d1);&lt;br /&gt;
     d1 = new Date(&amp;quot;2/4/2&amp;quot;);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 2/4/2: &amp;quot; + d1);&lt;br /&gt;
     d1 = new Date(&amp;quot;2/28/2000&amp;quot;);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 2/28/2000: &amp;quot; + d1);&lt;br /&gt;
     d1 = new Date(&amp;quot;2/29/1904&amp;quot;);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 2/29/1904: &amp;quot; + d1);&lt;br /&gt;
 &lt;br /&gt;
     d1 = new Date(12, 31, 1975);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 12/31/1975: &amp;quot; + d1);&lt;br /&gt;
     Date d2 = new Date(&amp;quot;1/1/1976&amp;quot;);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 1/1/1976: &amp;quot; + d2);&lt;br /&gt;
     Date d3 = new Date(&amp;quot;1/2/1976&amp;quot;);&lt;br /&gt;
     System.out.println(&amp;quot;Date should be 1/2/1976: &amp;quot; + d3);&lt;br /&gt;
 &lt;br /&gt;
     Date d4 = new Date(&amp;quot;2/27/1977&amp;quot;);&lt;br /&gt;
     Date d5 = new Date(&amp;quot;8/31/2110&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     /* I recommend you write code to test the isLeapYear function! */&lt;br /&gt;
 &lt;br /&gt;
     System.out.println(&amp;quot;\nTesting before and after.&amp;quot;);&lt;br /&gt;
     System.out.println(d2 + &amp;quot; after &amp;quot; + d1 + &amp;quot; should be true: &amp;quot; + &lt;br /&gt;
                        d2.isAfter(d1));&lt;br /&gt;
     System.out.println(d3 + &amp;quot; after &amp;quot; + d2 + &amp;quot; should be true: &amp;quot; + &lt;br /&gt;
                        d3.isAfter(d2));&lt;br /&gt;
     System.out.println(d1 + &amp;quot; after &amp;quot; + d1 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d1.isAfter(d1));&lt;br /&gt;
     System.out.println(d1 + &amp;quot; after &amp;quot; + d2 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d1.isAfter(d2));&lt;br /&gt;
     System.out.println(d2 + &amp;quot; after &amp;quot; + d3 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d2.isAfter(d3));&lt;br /&gt;
 &lt;br /&gt;
     System.out.println(d1 + &amp;quot; before &amp;quot; + d2 + &amp;quot; should be true: &amp;quot; + &lt;br /&gt;
                        d1.isBefore(d2));&lt;br /&gt;
     System.out.println(d2 + &amp;quot; before &amp;quot; + d3 + &amp;quot; should be true: &amp;quot; + &lt;br /&gt;
                        d2.isBefore(d3));&lt;br /&gt;
     System.out.println(d1 + &amp;quot; before &amp;quot; + d1 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d1.isBefore(d1));&lt;br /&gt;
     System.out.println(d2 + &amp;quot; before &amp;quot; + d1 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d2.isBefore(d1));&lt;br /&gt;
     System.out.println(d3 + &amp;quot; before &amp;quot; + d2 + &amp;quot; should be false: &amp;quot; + &lt;br /&gt;
                        d3.isBefore(d2));&lt;br /&gt;
 &lt;br /&gt;
     System.out.println(&amp;quot;\nTesting difference.&amp;quot;);&lt;br /&gt;
     System.out.println(d1 + &amp;quot; - &amp;quot; + d1  + &amp;quot; should be 0: &amp;quot; + &lt;br /&gt;
                        d1.difference(d1));&lt;br /&gt;
     System.out.println(d2 + &amp;quot; - &amp;quot; + d1  + &amp;quot; should be 1: &amp;quot; + &lt;br /&gt;
                        d2.difference(d1));&lt;br /&gt;
     System.out.println(d3 + &amp;quot; - &amp;quot; + d1  + &amp;quot; should be 2: &amp;quot; + &lt;br /&gt;
                        d3.difference(d1));&lt;br /&gt;
     System.out.println(d3 + &amp;quot; - &amp;quot; + d4  + &amp;quot; should be -422: &amp;quot; + &lt;br /&gt;
                        d3.difference(d4));&lt;br /&gt;
     System.out.println(d5 + &amp;quot; - &amp;quot; + d4  + &amp;quot; should be 48762: &amp;quot; + &lt;br /&gt;
                        d5.difference(d4));&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Lensovet</name></author>
		
	</entry>
</feed>