Calendar Page

Problem

You want a calendar for a given month of a given year, or of the current month and year.

Solution

Use Calendar.get( ) to find what day of the week the first of the month falls on, and format accordingly.

Discussion

Like the output of the Unix cal command, it is often convenient to view a month in compact form. The basic idea is to find what day of week the first of the month is and print blank columns for the days of the week before the month begins. Then, print the numbers from 1 to the end of the month, starting a new column after you get to the last day of each week.

Here’s my program, compared to the Unix cal command:

daroad.darwinsys.com$ java CalendarPage 6 2000
June 2000
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 
daroad.darwinsys.com$ cal 6 2000
     June 2000
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

The source code is simple and straightforward (Example 6-3).

Example 6-3. CalendarPage.java

import java.util.*; import java.text.*; /** Print a month page. * Only works for the Western calendar. */ public class CalendarPage { /** The names of the months */ String[] months = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; /** The days in each month. */ public final static int dom[] = { 31, 28, 31, 30, /* jan feb mar apr */ 31, 30, 31, 31, /* may jun jul aug */ 30, 31, 30, ...

Get Java Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.