SI
SI
discoversearch

We've detected that you're using an ad content blocking browser plug-in or feature. Ads provide a critical source of revenue to the continued operation of Silicon Investor.  We ask that you disable ad blocking while on Silicon Investor in the best interests of our community.  If you are not using an ad blocker but are still receiving this message, make sure your browser's tracking protection is set to the 'standard' level.
Technology Stocks : All About Sun Microsystems -- Ignore unavailable to you. Want to Upgrade?


To: Mike Milde who wrote (15930)4/29/1999 11:37:00 AM
From: JDN  Respond to of 64865
 
ARE you fellows CHARGING for this class? JDN



To: Mike Milde who wrote (15930)4/29/1999 11:51:00 AM
From: David W. Ricker  Read Replies (1) | Respond to of 64865
 
Mike, the getYear code I showed you is from the CoreJava package, class Day. Taken, in and of itself, it will not
work. I realize that we are supposed to use the Calendar class now, but despite the comment, the Date class does not appear to be deprecated.

(I should mention that this code in invoked in a NetDynamics App
(recently acquired by Sun), so that might be the problem.)

Here is the full code:

/*
* Gary Cornell and Cay S. Horstmann, Core Java (Book/CD-ROM)
* Published By SunSoft Press/Prentice-Hall
* Copyright (C) 1996 Sun Microsystems Inc.
* All Rights Reserved. ISBN 0-13-565755-5
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for NON-COMMERCIAL purposes
* and without fee is hereby granted provided that this
* copyright notice appears in all copies.
*
*/

/**
* Store dates and perform date arithmetic
* (another Date class, but more useful that
* java.util.Date)
* @version 1.02 13 Jun 1996
* @author Cay Horstmann
*/

package CoreJava;

public class Day implements Cloneable
{ /**
* Constructs today's date
*/

public Day()
{ java.util.Date today = new java.util.Date();
year = today.getYear() + 1900;
month = today.getMonth() + 1;
day = today.getDate();
}

/**
* Constructs a specific date
* @param yyyy year (full year, e.g., 1996,
* not starting from 1900)
* @param m month
* @param d day
* @exception IllegalArgumentException if yyyy m d not a
* valid date
*/

public Day(int yyyy, int m, int d)
{ year = yyyy;
month = m;
day = d;
if (!isValid())
throw new IllegalArgumentException();

}

/**
* Advances this day by n days. For example.
* d.advance(30) adds thirdy days to d
* @param n the number of days by which to change this
* day (can be < 0)
*/

public void advance(int n)
{ fromJulian(toJulian() + n);
}

public int getDay()
/**
* Gets the day of the month
* @return the day of the month (1...31)
*/

{ return day;
}

public int getMonth()
/**
* Gets the month
* @return the month (1...12)
*/

{ return month;
}

public int getYear()
/**
* Gets the year
* @return the year (counting from 0, not from 1900)
*/

{ return year;
}

/**
* Gets the weekday
* @return the weekday (0 = Sunday, 1 = Monday, ...,
* 6 = Saturday)
*/

public int weekday() { return (toJulian() + 1)% 7; }

/**
* The number of days between this and day parameter
* @param b any date
* @return the number of days between this and day parameter
* and b (> 0 if this day comes after b)
*/

public int daysBetween(Day b)
{ return toJulian() - b.toJulian();
}

/**
* ADDED METHOD - DLG
* true if the date b is equal to this day
* @param b any date
*/

public boolean equals(Day b)
{ return (toJulian() == b.toJulian());
}

/**
* ADDED METHOD - DLG
* true if the date b is before (less than) this day
* @param b any date
*/

public boolean before(Day b)
{ return (toJulian() - b.toJulian() <0);
}

/**
* ADDED METHOD - DLG
* true if the date b is before (less than) this day
* @param b any date
*/

public boolean isBefore(Day b)
{ return before(b);
}

/**
* ADDED METHOD - DLG
* true if the date b is after (greater than) this day
* @param b any date
*/

public boolean isAfter(Day b)
{ return (toJulian() - b.toJulian() >0);
}

/**
* A string representation of the day
* @return a string representation of the day
*/

public String toString()
{ return "Day[" + year + "," + month + "," + day + "]";
}

/**
* Makes a bitwise copy of a Day object
* @return a bitwise copy of a Day object
*/

public Object clone()
{ try
{ return super.clone();
} catch (CloneNotSupportedException e)
{ // this shouldn't happen, since we are Cloneable
return null;
}
}

/**
* Computes the number of days between two dates
* @return true iff this is a valid date
*/

private boolean isValid()
{ Day t = new Day();
t.fromJulian(this.toJulian());
return t.day == day && t.month == month
&& t.year == year;
}

private int toJulian()
/**
* @return The Julian day number that begins at noon of
* this day
* Positive year signifies A.D., negative year B.C.
* Remember that the year after 1 B.C. was 1 A.D.
*
* A convenient reference point is that May 23, 1968 noon
* is Julian day 2440000.
*
* Julian day 0 is a Monday.
*
* This algorithm is from Press et al., Numerical Recipes
* in C, 2nd ed., Cambridge University Press 1992
*/
{ int jy = year;
if (year < 0) jy++;
int jm = month;
if (month > 2) jm++;
else
{ jy--;
jm += 13;
}
int jul = (int) (java.lang.Math.floor(365.25 * jy)
+ java.lang.Math.floor(30.6001*jm) + day + 1720995.0);

int IGREG = 15 + 31*(10+12*1582);
// Gregorian Calendar adopted Oct. 15, 1582

if (day + 31 * (month + 12 * year) >= IGREG)
// change over to Gregorian calendar
{ int ja = (int)(0.01 * jy);
jul += 2 - ja + (int)(0.25 * ja);
}
return jul;
}

private void fromJulian(int j)
/**
* Converts a Julian day to a calendar date
* @param j the Julian date
* This algorithm is from Press et al., Numerical Recipes
* in C, 2nd ed., Cambridge University Press 1992
*/
{ int ja = j;

int JGREG = 2299161;
/* the Julian date of the adoption of the Gregorian
calendar
*/

if (j >= JGREG)
/* cross-over to Gregorian Calendar produces this
correction
*/
{ int jalpha = (int)(((float)(j - 1867216) - 0.25)
/ 36524.25);
ja += 1 + jalpha - (int)(0.25 * jalpha);
}
int jb = ja + 1524;
int jc = (int)(6680.0 + ((float)(jb-2439870) - 122.1)
/365.25);
int jd = (int)(365 * jc + (0.25 * jc));
int je = (int)((jb - jd)/30.6001);
day = jb - jd - (int)(30.6001 * je);
month = je - 1;
if (month > 12) month -= 12;
year = jc - 4715;
if (month > 2) --year;
if (year <= 0) --year;
}

private int day;
private int month;
private int year;
}



To: Mike Milde who wrote (15930)4/29/1999 12:50:00 PM
From: David W. Ricker  Read Replies (1) | Respond to of 64865
 
Final Exhibit on Date Issue, then I'll bug off. Just FYI.

All non-techies, avert your eyes.

import java.util.*;
public class dateTester
{
public static void main(String argv[])
{
Date today = new Date();

System.out.println("Todays's year = "+today.getYear());

Date tomorrow = new Date(2000,1,1);

System.out.println("Next year = "+tomorrow.getYear());

Date nextYear = new Date(00,1,1);

System.out.println("Digital next year = "+nextYear.getYear());

Date stringDate = new Date("January 1, 2000");

System.out.println("String next year = "+stringDate.getYear());

}

}

Results:
Todays's year = 99
Next year = 2000
Digital next year = 0
String next year = 100
Application terminated

The class is obviously overloaded. Works in as expected in some cases, not in others, but I will use the Calendar class. My apologies to the thread for flying off the handle. It is just that I am frustrated with the level of effort required to upgrade from NetDynamics 3.1 to 4.0 and the documentation stinks. Also, we are going to PeopleSoft 7.5 and cannot get ND 4.0 to communicate with our message agents, so in about two weeks we will be without workflow and without self-service. This whole experience has kind of soured me on the product.

If there are any gurus out there with any advice that
might get us past the ND 4.0 to PeopleSoft 7.5 message agent
impasse, I would be greatly appreciative.