1 /* Copyright (C) 1998, 1999 Cygnus Solutions
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
12 * @author Per Bothner <bothner@cygnus.com>
13 * @date October 24, 1998.
16 /* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3,
17 * and "The Java Language Specification", ISBN 0-201-63451-1.
18 * Status: Unimplemented: getAvailableLocales.
19 * No Locale knowledge.
22 public abstract class Calendar implements java.io.Serializable, Cloneable
24 public final static int JANUARY = 0;
25 public final static int FEBRUARY = 1;
26 public final static int MARCH = 2;
27 public final static int APRIL = 3;
28 public final static int MAY = 4;
29 public final static int JUNE = 5;
30 public final static int JULY = 6;
31 public final static int AUGUST = 7;
32 public final static int SEPTEMBER = 8;
33 public final static int OCTOBER = 9;
34 public final static int NOVEMBER = 10;
35 public final static int DECEMBER = 11;
36 public final static int UNDECIMBER = 12;
38 public final static int SUNDAY = 1;
39 public final static int MONDAY = 2;
40 public final static int TUESDAY = 3;
41 public final static int WEDNESDAY = 4;
42 public final static int THURSDAY = 5;
43 public final static int FRIDAY = 6;
44 public final static int SATURDAY = 7;
46 public final static int AM = 0;
47 public final static int PM = 1;
49 public final static int FIELD_COUNT = 17;
51 // These constants are not docuemnted, but were determined using
52 // a simple test program.
53 public final static int ERA = 0;
54 public final static int YEAR = 1;
55 public final static int MONTH = 2;
56 public final static int WEEK_OF_YEAR = 3;
57 public final static int WEEK_OF_MONTH = 4;
58 public final static int DATE = 5;
59 public final static int DAY_OF_MONTH = 5;
60 public final static int DAY_OF_YEAR = 6;
61 public final static int DAY_OF_WEEK = 7;
62 public final static int DAY_OF_WEEK_IN_MONTH = 8;
63 public final static int AM_PM = 9;
64 public final static int HOUR = 10;
65 public final static int HOUR_OF_DAY = 11;
66 public final static int MINUTE = 12;
67 public final static int SECOND = 13;
68 public final static int MILLISECOND = 14;
69 public final static int ZONE_OFFSET = 15;
70 public final static int DST_OFFSET = 16;
72 // The fields are as specified in Sun's "Serialized Form"
73 // in the JDK 1.2 beta 4 API specification.
74 protected boolean areFieldsSet;
75 protected int[] fields;
76 private int firstDayOfWeek;
77 protected boolean[] isSet;
78 protected boolean isTimeSet;
79 private boolean lenient;
80 private int minimalDaysInFirstWeek;
81 private int nextStamp;
82 //private int serialVersionOnStream;
84 private TimeZone zone;
91 protected Calendar (TimeZone tx, Locale loc)
93 fields = new int[FIELD_COUNT];
94 isSet = new boolean[FIELD_COUNT];
95 firstDayOfWeek = SUNDAY; // Locale-dependent. FIXME.
96 this.zone = zone != null ? zone : TimeZone.getDefault();
99 public Object clone ()
103 return super.clone();
105 catch (CloneNotSupportedException ex)
107 throw new RuntimeException("internal error - "+ex);
111 public static Calendar getInstance ()
113 return new GregorianCalendar ();
116 public static Calendar getInstance (TimeZone zone)
118 return new GregorianCalendar (zone);
121 public static Calendar getInstance (Locale locale)
123 return new GregorianCalendar (locale);
126 public static Calendar getInstance (TimeZone zone, Locale locale)
128 return new GregorianCalendar (zone, locale);
131 public boolean isLenient() { return lenient; }
132 public void setLenient (boolean lenient) { this.lenient = lenient; }
134 public int getFirstDayOfWeek ()
136 return firstDayOfWeek;
139 public void setFirstDayOfWeek (int value)
141 firstDayOfWeek = value;
144 public int getMinimalDaysInFirstWeek ()
146 return minimalDaysInFirstWeek;
149 public void setMinimalDaysInFirstWeek (int value)
151 minimalDaysInFirstWeek = value;
154 public TimeZone getTimeZone ()
159 public void setTimeZone (TimeZone tz)
164 abstract public void add(int fld, int amount);
165 abstract public void roll (int fld, boolean up);
167 public final void set (int year, int month, int date)
174 public final void set (int year, int month, int date, int hour, int minute)
176 set(year, month, date);
177 set(HOUR_OF_DAY, hour);
181 public final void set (int year, int month, int date,
182 int hour, int minute, int second)
184 set(year, month, date, hour, minute);
188 public final void set (int fld, int value)
194 public final void clear (int fld)
198 areFieldsSet = false;
201 public final void clear ()
203 for (int fld = FIELD_COUNT; --fld >= 0; )
208 areFieldsSet = false;
211 protected void complete()
213 if (!isTimeSet) computeTime();
214 if (!areFieldsSet) computeFields();
217 protected abstract void computeFields();
218 protected abstract void computeTime();
220 protected final int internalGet (int fld) { return fields[fld]; }
222 public final int get(int fld)
228 public abstract boolean after (Object cal);
229 public abstract boolean before (Object cal);
230 public abstract boolean equals (Object obj);
232 protected long getTimeInMillis()
234 if (!isTimeSet) computeTime();
238 public final Date getTime() { return new Date(getTimeInMillis()); }
240 public final void setTime (Date date)
242 setTimeInMillis(date.getTime());
245 protected void setTimeInMillis (long millis)
252 abstract public int getMaximum(int fld);
253 abstract public int getMinimum(int fld);
254 abstract public int getGreatestMinimum(int fld);
255 abstract public int getLeastMaximum(int fld);
257 public final boolean isSet(int fld) { return isSet[fld]; }