// Freitag13.java
// Autor: Matthias Gaertner, 08.09.2002
// Freeware

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;


public class Freitag13
{
    public static final String astrDay[] = {
        "Sonntag   ",
        "Montag    ",
        "Dienstag  ",
        "Mittwoch  ",
        "Donnerstag",
        "Freitag   ",
        "Samstag   " };

    public static void main( String[] argv )
    {
        int aiDayCount[] = { 0, 0, 0, 0, 0, 0, 0 };

        if( argv.length != 4 )
        {
            System.err.println( "Aufruf mit:" );
            System.err.println( "Freitag13 Startjahr Startmonat Stopjahr Stopmonat" );
            System.err.println( "Beispiel:" );
            System.err.println( "Freitag13 1582 11 2002 09" );
            System.exit(0);
        }

        // Beginn des Gregorianischen Kalenders: October 15, 1582
        // Erster 13. eines Monats war daher der 13.11.1582

        // Start November 1582 ...
        int start_year  = Integer.parseInt( argv[0] );
        int start_month = Integer.parseInt( argv[1] );

        // ... bis inklusive September 2002
        int stop_year   = Integer.parseInt( argv[2] );
        int stop_month  = Integer.parseInt( argv[3] );

        // Berechnung
        if( stop_month == 12 )
        {
            stop_month = 1;
            stop_year++;
        }

        GregorianCalendar c = new GregorianCalendar( start_year, start_month-1, 13 );
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");

        int nMonate = 0;
        while( c.get(Calendar.YEAR) < stop_year ||
              (c.get(Calendar.YEAR) <= stop_year && c.get(Calendar.MONTH) < stop_month ) )
        {
            // Wochentag merken
            aiDayCount[ c.get(Calendar.DAY_OF_WEEK)-1 ]++;

            // Freitag, der 13?
            if( c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY )
            {
                System.out.print( sdf.format(c.getTime()) + "      " );
            }

            // Naechsten Monat anspringen
            c.add( Calendar.MONTH, 1 );
            nMonate++;
        }

        System.out.println();
        System.out.println();
        System.out.println( "Der 13. eines Monats fiel in " + ((nMonate==1)?"diesem Monat":"diesen " + nMonate + " Monaten") + " so oft auf einen ...");
        for( int i = 0; i < 7; i++ )
        {
            System.out.println( astrDay[i] + ": " + aiDayCount[i] );
        }
    }
}
