Tips on using the Calendar class
CIT 591, David Matuszek, Fall 2001

You need to use Java's Calendar class. When you write your program, do not name your own class Calendar--that would make it very difficult to use Java's Calendar class.

The way you use a Calendar is like this:

  1. You create a calendar,
  2. you set it to a particular date,
  3. you ask it for information about that date.

For reasons we have not yet discussed in class, you cannot create a Calendar object directly; instead, you must create a GregorianCalendar object, which can then be assigned to a Calendar variable. Like so:

Calendar calendar = new GregorianCalendar();

(I apologize for not having noticed this particular problem earlier.)

The easiest way to set a calendar to a particular date is to use the following instance method of the Calendar class:

void set(int year, int month, int date)

Note that the actual parameters are all integers. This makes sense for the year, and for the "date" (an integer between 1 and 31), but what about the month? It could be an integer between 0 and 11, or it could be an integer between 1 and 12. Which way does Java do it?

You don't actually have to know what numbers Java uses for the months, because it provides you with a set of named constants Calendar.JANUARY, Calendar.FEBRUARY, and so on up through Calendar.DECEMBER. (There's even a named constant for a month you probably don't know about, Calendar.UNDECIMBER.)

The set method allows you to set your calendar to some particular day, for example, January 1 of the year that is entered by the user. The next step is to ask your calendar for some information about that date, such as the day of the week on which it falls.

If you understand the idea of named constants, the next routine, get, should make sense. If you do not, you will find it doubly confusing, because it uses a named constant to tell it what to get, and it returns an integer. In some cases, you need to compare the returned integer to other named constants in order to make sense of it.

The form of the get method is:

int get(int field)

where the actual parameter is an integer telling what information you want to get. A actual parameter of Calendar.YEAR would be asking for the year, an actual parameter of Calendar.DAY_OF_WEEK would be asking for the day of the week, Calendar.WEEK_OF_MONTH would ask for which week of the month the day in in, and so on. You are probably most interested in Calendar.DAY_OF_WEEK, which will return an integer between 1 and 7--or is it between 0 and 6? Once again, you don't have to remember, because you can compare the returned value to the named constants Calendar.SUNDAY, Calendar.MONDAY, and so on. Or you can look at the Calendar documentation and find out which integers are used for which days of the week.

Another method you might find useful is

int getActualMaximum(int field)

but I'll leave you to read the documentation for that method.

Again, these methods are all instance methods that are defined for you in the Calendar class. You do not write these methods yourself, you just use them.

A final note: If you read the assignment, you will see that I am asking you to get the year from the BlueJ dialog box. This means that your program has to work for any year that the user types in to this dialog box. I thought this was clear from the assignment, but apparently it isn't clear to everyone.