package sale;
public class Date extends Object implements Time {
private String m_sDate;
private String m_sDefaultInterval = new String ("1");
private boolean m_fSpecialYear = true;
public Date() {
this ("01.01.00");
}
public Date (String sNewDate)
throws IllegalArgumentException {
super();
setTime (sNewDate);
}
public void setTime (Object oTime)
throws IllegalArgumentException {
validate (oTime);
m_sDate = (String) oTime;
long lHelp = Long.parseLong (m_sDate.substring (6,8));
if (lHelp % 4 == 0) {
m_fSpecialYear = true;
}
else {
m_fSpecialYear = false;
}
}
public Object getTime() {
return (m_sDate);
}
public void goAhead (Object oInterval) throws IllegalArgumentException {
if (!(oInterval instanceof String)) throw new IllegalArgumentException ("Parameter has to be of type String.");
long lInterval = Long.parseLong ((String) oInterval);
long lDay = Long.parseLong (m_sDate.substring (0,2));
long lMonth = Long.parseLong (m_sDate.substring (3,5));
long lYear = Long.parseLong (m_sDate.substring (6,8));
lDay += lInterval;
while ((((lMonth == 1) || (lMonth == 3) || (lMonth == 5) || (lMonth == 7) ||
(lMonth == 8) || (lMonth == 10) || (lMonth == 12)) && (lDay > 31)) ||
(((lMonth == 4) || (lMonth == 6) || (lMonth == 9) || (lMonth == 11)) &&
(lDay > 30)) ||
((lMonth == 2) && ((lDay > 28) && (!m_fSpecialYear))) || ((lMonth == 2) && ((lDay > 29) && (m_fSpecialYear))))
{
if (((lMonth == 1) || (lMonth == 3) || (lMonth == 5) || (lMonth == 7) ||
(lMonth == 8) || (lMonth == 10) || (lMonth == 12)) && (lDay > 31)) {
lDay -= 31;
lMonth++;
}
if (((lMonth == 4) || (lMonth == 6) || (lMonth == 9) || (lMonth == 11)) &&
(lDay > 30)) {
lDay -= 30;
lMonth++;
}
if ((lMonth == 2) && (lDay > 28)) {
if (!m_fSpecialYear) {
lDay -= 28;
lMonth++;
}
else {
if (lDay > 29) {
lDay -= 29;
lMonth++;
}
}
}
if (lMonth > 12) {
long i = 0;
while (lMonth > 12) {
lMonth -= 12;
i++;
}
lYear+= i;;
if (lYear > 99) {lYear = 0;}
if (lYear % 4 == 0) {
m_fSpecialYear = true;
}
else {
m_fSpecialYear = false;
}
}
}
String sHelp = "";
if (lDay < 10) {sHelp = "0" + Long.toString(lDay) + ".";}
else {sHelp = Long.toString(lDay) + ".";}
if (lMonth < 10) {sHelp = sHelp + "0" + Long.toString(lMonth) + ".";}
else {sHelp = sHelp + Long.toString(lMonth) + ".";}
if (lYear < 10) {sHelp = sHelp + "0" + Long.toString(lYear);}
else {sHelp = sHelp + Long.toString(lYear);}
m_sDate = new String (sHelp);
}
public Object getDefaultInterval() {
return (m_sDefaultInterval);
}
public Comparable getTimeStamp (long lStampNumber) {
java.util.StringTokenizer stDate = new java.util.StringTokenizer (m_sDate, ".");
String sReturn = ("000000000" + Long.toString (lStampNumber)).substring(Long.toString (lStampNumber).length());
sReturn = stDate.nextToken() + sReturn;
sReturn = stDate.nextToken() + sReturn;
sReturn = stDate.nextToken() + sReturn;
return sReturn;
}
public String toString() {return m_sDate;}
private void validate (Object oToValidate) throws IllegalArgumentException {
if (!(oToValidate instanceof String)) throw new IllegalArgumentException ("Parameter has to be of type String.");
if (!(((String) oToValidate).length() == 8)) throw new IllegalArgumentException ("Parameter has to consist of 8 chars: dd.mm.yy");
java.util.StringTokenizer stToValidate = new java.util.StringTokenizer ((String) oToValidate, ".");
String sDay = stToValidate.nextToken();
if (sDay.length() != 2) throw new IllegalArgumentException ("Parameter has to consist of 8 chars: dd.mm.yy");
String sMonth = stToValidate.nextToken();
if (sMonth.length() != 2) throw new IllegalArgumentException ("Parameter has to consist of 8 chars: dd.mm.yy");
String sYear = stToValidate.nextToken();
if (sYear.length() != 2) throw new IllegalArgumentException ("Parameter has to consist of 8 chars: dd.mm.yy");
long lDay = Long.parseLong (sDay);
long lMonth = Long.parseLong (sMonth);
long lYear = Long.parseLong (sYear);
if ((lMonth > 12) || (lMonth < 1)) throw new IllegalArgumentException ("Month has to be between 1 and 12");
switch ((int) lMonth) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if ((lDay > 31) || (lDay < 1)) throw new IllegalArgumentException ("Day has to be between 1 and 31");
break;
case 4: case 6: case 9: case 11:
if ((lDay > 30) || (lDay < 1)) throw new IllegalArgumentException ("Day has to be between 1 and 30");
break;
default :
if (lYear % 4 == 0 && (lDay > 29 || lDay < 1)) throw new IllegalArgumentException ("Day has to be between 1 and 29");
if (lYear % 4 != 0 && (lDay > 28 || lDay < 1)) throw new IllegalArgumentException ("Day has to be between 1 and 28");
}
}
public java.util.Date getDateValue() {
try {
java.util.StringTokenizer stToValidate = new java.util.StringTokenizer (m_sDate, ".");
String sDay = stToValidate.nextToken();
String sMonth = stToValidate.nextToken();
String sYear = stToValidate.nextToken();
long lDay = Long.parseLong (sDay);
long lMonth = Long.parseLong (sMonth);
long lYear = Long.parseLong (sYear);
java.util.Calendar c = java.util.Calendar.getInstance();
c.clear();
c.set ((int) lYear + 1900, (int) lMonth, (int) lDay);
return c.getTime();
}
catch (IllegalArgumentException iae) {
return null;
}
}
}